0

在 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);
4

1 回答 1

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 命令看到密码。

于 2014-10-08T20:03:43.963 回答