對(duì)mysql的權(quán)限的控制可以大致分為三個(gè)層面:
- 連接上允不允許(是否能登錄到mysql服務(wù)器)
- 數(shù)據(jù)庫層面上:允許用戶操作哪些數(shù)據(jù)庫
- 數(shù)據(jù)標(biāo)層面上:允許用戶操作哪些表台囱,并可以定義對(duì)表的操作權(quán)限:比如insert来累,create,update等。如果還覺得不夠精細(xì)特姐,MySQL還可以精確到對(duì)某表某列控制操作權(quán)限遏片。
- 連接到數(shù)據(jù)庫的權(quán)限。
我們?cè)诎惭bMySQL的過程中顽爹,會(huì)有一個(gè)會(huì)話定義你的用戶名和密碼纤泵,這里我用的是root和123456,這個(gè)用戶名,是最開始連接到MySQL的用戶捏题,那么該怎么查看MySQL的用戶信息呢玻褪?我們用root和123456連接到MySQL之后,show databases;可以看到有很多數(shù)據(jù)庫
use mysql; 然后show tables;
可以看到兩個(gè)表:user表公荧,db表和table_priv带射。
用select *from db\G 可以從db表中看到哪些用戶擁有對(duì)哪些數(shù)據(jù)庫的權(quán)限。查看tables_priv可以查看用戶擁有哪些表的操作權(quán)限循狰。
查看user表則可以看到能登錄到MySQL的用戶信息:(以下的user表均指的是mysql庫下的user表)
select host,user,password from user;
我們可以定義一個(gè)用戶并讓他擁有所有庫窟社,所有表的所有增刪改查等操作權(quán)限,語句如下:
grant all on *.* to hehe@'localhost' identified by '123456';
如果要?jiǎng)h除這個(gè)用戶绪钥,用delete語句就可以了灿里。
- 庫權(quán)限的控制
我們可以定義用戶可以操作的庫,只需要在上面的語句中程腹,改各參數(shù)即可匣吊,你可能已經(jīng)猜到了:上面語句中的"某庫"修改成對(duì)應(yīng)的庫名即可。例如寸潦,給hehe用戶賦予操作test庫的所有權(quán)限:
grant all on test.* to hehe@'localhost' identified by '123456';
- 精細(xì)到對(duì)表的權(quán)限的控制
改一下"某表"和"權(quán)限X"就可以了色鸳。例如:定義給用戶hehe操作test庫的goods表的insert,select见转,update的權(quán)限命雀,代碼如下:
grant insert,select,update on test.goods to hehe@'localhost' identified by '123456';
最后,怎樣回收用戶的庫級(jí)和表級(jí)權(quán)限呢斩箫?語法如下:
revoke [權(quán)限1吏砂,權(quán)限2...] on 某庫.某表 from 用戶名@'主機(jī)名/IP';
可不可以回收用戶對(duì)具體哪一張表的權(quán)限呢?我試了一下校焦,貌似是不行的赊抖,報(bào)錯(cuò)信息如下:
最后提一下:如果要讓某子網(wǎng)下的用戶(或者某個(gè)IP地址)都可以訪問數(shù)據(jù)庫服務(wù)器時(shí),可以這樣定義用戶:
update user set host='192.168.1.%' where user='hehe';/*<span style="white-space:pre"> </span>%表示匹配IP地址192.168.1.1至192.168.1.254*/
flush privileges;/*刷新權(quán)限以生效*/
具體到某個(gè)IP地址時(shí)把%改成具體的地址即可寨典。有了可以用IP限制登陸的主機(jī)氛雪,外網(wǎng)的用戶就不能登錄到內(nèi)網(wǎng)的MySQL服務(wù)器了。