1.添加MySQL賬戶
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘www’@'localhost’IDENTIFIED BY ’123456′ WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘www’@'%’IDENTIFIED BY ’123456′ WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO ‘admin’@'localhost’;
mysql> GRANT USAGE ON *.* TO ‘dummy’@'localhost’;
用GRANT語句建立的賬戶有下面的屬性:
前兩個賬戶有相同的使用者名www和密碼123456。兩個賬戶均為超級使用者賬戶,具有完全的權限可以做任何事情。一個賬戶 (‘www’@'localhost’)隻用于從本機連接配接時。另一個賬戶(‘www’@'%’)可用于從其它主機連接配接。請注意www的兩個賬戶必須能從任何主機以www連接配接。沒有localhost賬戶,當www從本機連接配接時,mysql_install_db建立的localhost的匿名使用者賬戶将占先。結果是,www将被視為匿名使用者。原因是匿名使用者賬戶的Host列值比’www’@'%’賬戶更具體,這樣在user表排序順序中排在前面。
一個賬戶有使用者名admin,沒有密碼。該賬戶隻用于從本機連接配接。授予了RELOAD和PROCESS管理權限。這些權限允許admin使用者執行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx指令,以及mysqladmin processlist。未授予通路資料庫的權限。你可以通過GRANT語句添加此類權限。
一個賬戶有使用者名dummy,沒有密碼。該賬戶隻用于從本機連接配接。未授予權限。通過GRANT語句中的USAGE權限,你可以建立賬戶而不授予任何權限。它可以将所有全局權限設為’N'。假定你将在以後将具體權限授予該賬戶。
2.從MySQL删除使用者賬戶
要想移除賬戶,應使用DROP USER語句:
DROP USER user [, user] …
3.限制賬戶資源
要想用GRANT語句設定資源限制,使WITH子句來命名每個要限制的資源和根據每小時記數的限制值。例如,要想隻以限制方式建立可以通路customer資料庫的新賬戶,執行該語句:
mysql> GRANT ALL ON customer.* TO ‘francis’@'localhost’
-> IDENTIFIED BY ‘frank’
-> WITH MAX_QUERIES_PER_HOUR 20
-> MAX_UPDATES_PER_HOUR 10
-> MAX_CONNECTIONS_PER_HOUR 5
-> MAX_USER_CONNECTIONS 2;
要想設定或更改已有賬戶的限制,在全局級别使用GRANT USAGE語句(在*.*)。下面的語句可以将keer的查詢限制更改為200:
mysql> GRANT USAGE ON *.* TO ‘keer’@'localhost’ WITH MAX_QUERIES_PER_HOUR 200;
該語句沒有改變賬戶的已有權限,隻修改了指定的限制值。
要想取消已有限制,将該值設定為零。例如,要想取消keer每小時可以連接配接的次數的限制,使用該語句:
mysql> GRANT USAGE ON *.* TO ‘keer’@'localhost’ WITH MAX_CONNECTIONS_PER_HOUR 0;
當賬戶使用資源時如果有非零限制,則對資源使用進行記數。
4.設定賬戶密碼
可以用mysqladmin指令在指令行指定密碼:
shell> mysqladmin -u username -h hostname password “yourpassword”
該指令重設密碼的賬戶為user表内比對User列的username和Host列你發起連接配接的用戶端的記錄。
為賬戶賦予密碼的另一種方法是執行SET PASSWORD語句:
mysql> SET PASSWORD FOR ‘www’@'%’ = PASSWORD(’123456′);
隻有root等可以更新mysql資料庫的使用者可以更改其它使用者的密碼。如果你沒有以匿名使用者連接配接,省略FOR子句便可以更改自己的密碼:
mysql> SET PASSWORD = PASSWORD(’123456′);
你還可以在全局級别使用GRANT USAGE語句(在*.*)來指定某個賬戶的密碼而不影響賬戶目前的權限:
mysql> GRANT USAGE ON *.* TO ‘www’@'%’ IDENTIFIED BY ’123456′;
一般情況下最好使用上述方法來指定密碼,你還可以直接修改user表:
要想在建立新賬戶時建立密碼,在Password列提供一個值:
shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password) VALUES(‘%’,'www’,PASSWORD(’123456′));
mysql> FLUSH PRIVILEGES;
要想更改已有賬戶的密碼,使用UPDATE來設定Password列值:
shell> mysql -u root mysql
mysql> UPDATE user SET Password = PASSWORD(’123456′) WHERE Host = ‘%’ AND User = ‘www’;
mysql> FLUSH PRIVILEGES;
當你使用SET PASSWORD、INSERT或UPDATE指定賬戶的密碼時,必須用PASSWORD()函數對它進行加密。(唯一的特例是如果密碼為空,你不需要使用PASSWORD())。需要使用PASSWORD()是因為user表以加密方式儲存密碼,而不是明文。如果你忘記了,你可能會象這樣設定密碼:
shell> mysql -u root mysql
mysql> INSERT INTO user (Host,User,Password) VALUES(‘%’,'www’,’123456′);
mysql> FLUSH PRIVILEGES;
結果是密碼’123456′儲存到user表後沒有加密。當www使用該密碼連接配接伺服器時,值被加密并同儲存在user表中的進行比較。但是,儲存的值為字元串’123456′,是以比較将失敗,伺服器拒絕連接配接:
shell> mysql -u www -p 123456 test
Access denied
當然你使用GRANT … IDENTIFIED BY語句或mysqladmin password指令設定密碼,它們均會加密密碼。在這種情況下,不需要使用 PASSWORD()函數。
5.設定賬号遠端通路
有些時候建立的資料庫賬号都是針對資料庫伺服器本地的,在叢集中mysql資料庫是共用的,那就需要給出一個賬号能夠讓叢集中的其他伺服器遠端通路,具體操作如下
mysql> use mysql;
mysql> GRANT ALL ON *.* TO [email protected]’%’ IDENTIFIED BY ’123456′ WITH GRANT OPTION;
#注解:允許任何IP位址的主機用【www】帳戶和密碼【123456】來通路這個MySQL Server
#必須加類似這樣的帳戶,才可以遠端登陸。root帳戶是無法遠端登陸的,隻可以localhost登陸
測試使用下面指令即可
mysql -h *.*.*.* -u www -p 123456
在測試的發現了一個問題
mysql -h localhost -u www -p 123456
如下指令我在本地用localhost通路是失敗的,google之後才發現原來上面的’%'居然不包括localhost的,是以為了本地也能方位資料庫需要再加上下面一句
mysql> GRANT ALL ON *.* TO [email protected]’localhost’ IDENTIFIED BY ’123456′ WITH GRANT OPTION;
okay,測試通過