2014-10-08 55 views
0

在shell(.sh文件)中,我試圖更新用戶「root」的MYSQL密碼。通過Shell更新根密碼

目前我有這個,這是安全的和正確的方式來做到這一點? 我不想提示。

我也想知道「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 '[email protected]' = PASSWORD('secret');" 
sudo mysql --user=$USER --password=$PASS -e "SET PASSWORD FOR '[email protected]' = PASSWORD('secret');" 
sudo mysql --user=$USER --password=$PASS -e "SET PASSWORD FOR '[email protected]::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 '[email protected]' = PASSWORD(password); 
SET PASSWORD FOR '[email protected]' = PASSWORD(password); 
SET PASSWORD FOR '[email protected]::1' = PASSWORD(password); 
+0

'sudo -s'允許您在子shell中運行多個命令,可能會清理一下,或者創建一個輔助腳本來重新分配您可以使用'sudo'運行一次的所有密碼。 – tadman 2014-10-08 20:06:50

回答

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 '[email protected]' 'PASSWORD HASH GOES HERE' ' 

就個人而言,我不由於非特權用戶可能通過ps/ptree/pstree命令可能會看到密碼,因此在命令行上根本不想使用明文密碼。

+0

你應該使用['PASSWORD()'](http://dev.mysql.com/doc/refman/5.6/en/encryption-functions.html#function_password)函數,而不是自己散列它。這在更新版本的MySQL中使用SHA256,所以你基本上是在用SHA1強制不良行爲。 – tadman 2014-10-08 20:04:32

+0

如果您在命令行上使用PASSWORD()函數,則可能會截取您的明文密碼。你可以用sha256sum替換sha1sum,這會修復我以前的命令。 – b600 2014-10-08 20:24:02

+0

如果某人能夠讀取root用戶的shell歷史記錄,那麼您的問題遠遠超出MySQL密碼。 – tadman 2014-10-08 20:27:23