通过Shell更新Root密码

时间:2014-10-08 19:50:24

标签: mysql shell mysqladmin

在shell(.sh文件)中,我正在尝试为用户“root”更新MYSQL密码。

目前我有这个,这是安全的,正确的方法吗? 我不想要提示。

我也想知道“mysqladmin”和“mysql”的帐号是否相同。

#Variables for User and Pass
USER="root"
PASS="test"

mysqladmin -u root password $PASS
#Set Root User Password for all Local domains
sudo mysql --user=$USER --password=$PASS -e "SET PASSWORD FOR 'root@localhost' = PASSWORD('secret');"
sudo mysql --user=$USER --password=$PASS -e "SET PASSWORD FOR 'root@127.0.0.1' = PASSWORD('secret');"
sudo mysql --user=$USER --password=$PASS -e "SET PASSWORD FOR 'root@::1' = PASSWORD('secret');"
#Drop the Any User
sudo mysql --user=$USER --password=$PASS -e "DROP USER ''@'localhost';"

更新

考虑到tadman和b600的反应。

这样的事情会是一个好主意吗?

防止密码显示在shell历史记录中。

# bootstrap.sh
USER="root"
PASS="test"

sudo mysqladmin -u root password $PASS
sudo mysql --user=$USER --password=$PASS -e < /tmp/users.sql
rm -f /tmp/users.sql

# users.sql
SET @password = secret;
DELETE * FROM mysql.user WHERE users IS NOT 'root';

SET PASSWORD FOR 'root@localhost' = PASSWORD(password);
SET PASSWORD FOR 'root@127.0.0.1' = PASSWORD(password);
SET PASSWORD FOR 'root@::1' = PASSWORD(password);

1 个答案:

答案 0 :(得分:0)

我建议您在本地计算机上以特权用户身份生成密码哈希,并将哈希值传递给密码更改命令。

根据this page,mysql中使用的密码哈希值为SHA1,您可以使用以下命令生成密码:

echo -n password | sha1sum | awk '{print toupper($1)}'

另外,根据http://dev.mysql.com/doc/refman/5.1/en/set-password.html,您可以使用

'SET PASSWORD FOR 'user@domain' 'PASSWORD HASH GOES HERE' '

就个人而言,我不喜欢在命令行上使用明文密码,因为非特权用户可能会通过ps / ptree / pstree命令看到密码。