MySQL 存取控制包含2個(gè)階段:
- 階段1:服務(wù)器檢查是否允許你連接。
- 階段2:假定你能連接,服務(wù)器檢查你發(fā)出的每個(gè)請(qǐng)求。看你是否有足夠的權(quán)限實(shí)施它。例如,如果你從數(shù)據(jù)庫表中選擇(select)行或從數(shù)據(jù)庫刪除表,服務(wù)器確定你對(duì)表有SELECT權(quán)限或?qū)?shù)據(jù)庫有DROP權(quán)限。
1.權(quán)限查看
mysql>?show?grants?for?'root'@'localhost'?;
+---------------------------------------------------------------------+
|?Grants?for?root@localhost???????????????????????????????????????????|
+---------------------------------------------------------------------+
|?GRANT?ALL?PRIVILEGES?ON?*.*?TO?'root'@'localhost'?WITH?GRANT?OPTION?|
+---------------------------------------------------------------------+
1?row?in?set?(0.06?sec)
+---------------------------------------------------------------------+
|?Grants?for?root@localhost???????????????????????????????????????????|
+---------------------------------------------------------------------+
|?GRANT?ALL?PRIVILEGES?ON?*.*?TO?'root'@'localhost'?WITH?GRANT?OPTION?|
+---------------------------------------------------------------------+
1?row?in?set?(0.06?sec)
2.權(quán)限設(shè)置
5.8.2. 向MySQL增加新用戶賬戶
mysql>?GRANT?ALL?PRIVILEGES?ON?*.*?TO?'monty'@'localhost'
????->?????IDENTIFIED?BY?'some_pass';
mysql>?GRANT?ALL?PRIVILEGES?ON?*.*?TO?'monty'@'%'
????->?????IDENTIFIED?BY?'some_pass'?WITH?GRANT?OPTION;
?? 其中兩個(gè)賬戶有相同的用戶名monty和密碼some_pass。兩個(gè)賬戶均為超級(jí)用戶賬戶,具有完全的權(quán)限可以做任何事情。一個(gè)賬戶 ('monty'@'localhost')只用于從本機(jī)連接時(shí)。另一個(gè)賬戶('monty'@'%')可用于從其它主機(jī)連接。
mysql>?GRANT?RELOAD,PROCESS?ON?*.*?TO?'admin'@'localhost';
該賬戶只用于從本機(jī)連接。授予了RELOAD和PROCESS管理權(quán)限。這些權(quán)限允許admin用戶執(zhí)行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx命令,以及mysqladmin processlist。未授予訪問數(shù)據(jù)庫的權(quán)限。你可以通過GRANT語句添加此類權(quán)限。
mysql>?GRANT?USAGE?ON?*.*?TO?'dummy'@'localhost';
??? 一個(gè)賬戶有用戶名dummy,沒有密碼。該賬戶只用于從本機(jī)連接。未授予權(quán)限。通過GRANT語句中的USAGE權(quán)限,你可以創(chuàng)建賬戶而不授予任何權(quán)限。它可以將所有全局權(quán)限設(shè)為'N'。假定你將在以后將具體權(quán)限授予該賬戶。
????->?????IDENTIFIED?BY?'some_pass';
mysql>?GRANT?ALL?PRIVILEGES?ON?*.*?TO?'monty'@'%'
????->?????IDENTIFIED?BY?'some_pass'?WITH?GRANT?OPTION;
?? 其中兩個(gè)賬戶有相同的用戶名monty和密碼some_pass。兩個(gè)賬戶均為超級(jí)用戶賬戶,具有完全的權(quán)限可以做任何事情。一個(gè)賬戶 ('monty'@'localhost')只用于從本機(jī)連接時(shí)。另一個(gè)賬戶('monty'@'%')可用于從其它主機(jī)連接。
mysql>?GRANT?RELOAD,PROCESS?ON?*.*?TO?'admin'@'localhost';
該賬戶只用于從本機(jī)連接。授予了RELOAD和PROCESS管理權(quán)限。這些權(quán)限允許admin用戶執(zhí)行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx命令,以及mysqladmin processlist。未授予訪問數(shù)據(jù)庫的權(quán)限。你可以通過GRANT語句添加此類權(quán)限。
mysql>?GRANT?USAGE?ON?*.*?TO?'dummy'@'localhost';
??? 一個(gè)賬戶有用戶名dummy,沒有密碼。該賬戶只用于從本機(jī)連接。未授予權(quán)限。通過GRANT語句中的USAGE權(quán)限,你可以創(chuàng)建賬戶而不授予任何權(quán)限。它可以將所有全局權(quán)限設(shè)為'N'。假定你將在以后將具體權(quán)限授予該賬戶。
下面的例子創(chuàng)建3個(gè)賬戶,允許它們?cè)L問專用數(shù)據(jù)庫。每個(gè)賬戶的用戶名為custom,密碼為obscure。
mysql>?GRANT?SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
????->?????ON?bankaccount.*
????->?????TO?'custom'@'localhost'
????->?????IDENTIFIED?BY?'obscure';
mysql>?GRANT?SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
????->?????ON?expenses.*
????->?????TO?'custom'@'whitehouse.gov'
????->?????IDENTIFIED?BY?'obscure';
mysql>?GRANT?SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
????->?????ON?customer.*
????->?????TO?'custom'@'server.domain'
????->?????IDENTIFIED?BY?'obscure';
這3個(gè)賬戶可以用于:
·?????????第1個(gè)賬戶可以訪問bankaccount數(shù)據(jù)庫,但只能從本機(jī)訪問。
·?????????第2個(gè)賬戶可以訪問expenses數(shù)據(jù)庫,但只能從主機(jī)whitehouse.gov訪問。
·?????????第3個(gè)賬戶可以訪問customer數(shù)據(jù)庫,但只能從主機(jī)server.domain訪問。
要想不用GRANT設(shè)置custom賬戶,使用INSERT語句直接修改?授權(quán)表: