天天看點

MySQL使用者賬号管理(添加、删除、限制、設定密碼、遠端通路)

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,測試通過