2012-03-02 201 views
26

我試圖自動化MySQL用戶創建過程。 我想創建將包含MySQL用戶創建報表的臨時文件,然後 我會這樣稱呼它:Mysql用戶創建腳本

的mysql -u根-proot <臨時

但我堅持了MySQL的句法: 這裏是我的臨時文件的內容:


DROP DATABASE IF EXISTS mytestdatabase; 
CREATE DATABASE mytestdatabase; 
SELECT @password:="my password"; 
DELETE FROM mysql.user WHERE Host='localhost' AND User='mytestdatabase'; 
GRANT ALL PRIVILEGES ON mytestdatabase.* TO 'mytestdatabase'@'localhost' IDENTIFIED BY PASSWORD '@password'; 
FLUSH PRIVILEGES; 

而行

GRANT ALL PRIVILEGES ON mytestdatabase.* TO 'mytestdatabase'@'localhost' IDENTIFIED BY PASSWORD '@password'; 

(密碼哈希應該是一個41位十六進制數)

不被解釋爲我希望它是。 即使我刪除@password標籤周圍的單引號,我仍然有錯誤(語法錯誤)

我該如何做這項工作?

+0

什麼是錯誤信息? – 2012-03-02 07:44:37

+0

錯誤1372(HY000)在第9行:密碼散列應該是一個41位十六進制數字 – ling 2012-03-02 07:48:56

回答

51

只是爲了回答爲什麼發生錯誤並顯示差異:


A)預計@password散列字符串值:

GRANT ALL PRIVILEGES 
    ON `mydb` . * TO 'username'@'localhost' IDENTIFIED 
BY 
PASSWORD '@password'; 

注意使用PASSWORD關鍵字!


B)預計公司@password是一個明文字符串值:

GRANT ALL PRIVILEGES 
    ON `mydb` . * TO 'username'@'localhost' IDENTIFIED 
BY 
'@password'; 

失蹤PASSWORD關鍵字!


其中 「散列串」 是SELECT PASSWORD('clearTextPasswd');結果 - 見Snowman's answer的一個例子。

+1

欣賞解釋 – matt 2012-06-29 20:53:48

+1

不錯。很好的解釋。 – cbmeeks 2012-07-03 14:12:28

+1

非常感謝你 – Abdel 2014-10-03 13:01:31

1

嘗試:

GRANT ALL PRIVILEGES ON mytestdatabase.* 
     TO [email protected] IDENTIFIED BY 'PASSWORD'; 

其中password是你的密碼(引號)。

+0

是的,它會工作,但我聽說它不太安全,因爲密碼可以清晰的形式出現在mysql歷史文件中。我希望儘可能避免使用此解決方案。 – ling 2012-03-02 07:50:59

+0

然後你可以按照我的設置來設置它,然後像這樣改變它:SET PASSWORD FOR mytestdatabase = PASSWORD('PASSWORD'); – alfasin 2012-03-02 07:52:45

+0

密碼的清晰形式仍然出現,但也許是因爲它是從文件調用的,它不會記錄在「mysql歷史記錄」中。我可能試圖獲得更多的信息,如何「MySQL歷史」真正起作用。謝謝。 – ling 2012-03-02 08:05:59

10

如果你不想來存儲明文密碼,然後將其保存散列格式 -

GRANT ALL PRIVILEGES ON mytestdatabase.* TO 'mytestdatabase'@'localhost' 
    IDENTIFIED BY PASSWORD '*7560636C2922C05954FE6A2446AA00C84708B57B'; 

哪裏哈希密碼是這個查詢的結果 -

SELECT PASSWORD('my password'); 
4

看看下面的網址,這將幫助你解決這個問題:

http://linuxadministrator.pro/blog/?p=147

mysql> select password('12345'); 
+-------------------------+ 
| password('123456') | 
+-------------------------+ 
| 2ff898e158cd0311  | 
+-------------------------+ 
1 row in set (0.00 sec) 

mysql> create user test identified by password '2ff898e158cd0311'; 
Query OK, 0 rows affected (0.00 sec) 
0

我打開phpMyAdmin的,走到用戶選項卡,發現我是用戶試圖連接點擊編輯權限,滾動到更改登錄信息/複製用戶部分,並選擇任何主機爲主機選項,它被設置爲本地。當我點擊Go按鈕時,它會生成一個類似於這裏列出的腳本。

GRANT ALL PRIVILEGES ON * . * TO 'james'@'%' IDENTIFIED BY PASSWORD '*780E1D13F1C7713F341A117499C6D8644464C4CF' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; 
0

好帽子是錯誤bcoz你已經寫了錯誤的方式就是你已經寫了,

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' IDENTIFIED BY PASSWORD '@password'; 

;而真正的語法如下。看這裏。

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' IDENTIFIED BY '@password'; 

因爲您的密碼導致了該錯誤。它必須如圖所示。

4

我也有同樣的問題,它只是通過提到的查詢設置密碼解決下面。

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('MyNewPass');