如果需要查看MySQL用戶權(quán)限命满,應(yīng)該如何實(shí)現(xiàn)呢对供?
一调榄、GRANT授權(quán)
# mysql -u root -p"xxx"
> grant usage on *.* to 'discuz'@'localhost' identified by 'XXX';
> grant all privileges on `discuz`.* to 'discuz'@'localhost';
創(chuàng)建一個(gè)只可以在本地登陸的 不能操作的用用戶名 discuz 密碼為 XXX恃慧,給這個(gè)discuz用戶操作discuz數(shù)據(jù)庫(kù)的所有權(quán)限趟咆。
GRANT命令用來(lái)建立新用戶添瓷,指定用戶口令并增加用戶權(quán)限,其格式如下:
> GRANT ON
-> TO [IDENTIFIED BY ""]
-> [WITH GRANT OPTION];
正如你看到的值纱,在這個(gè)命令中有許多待填的內(nèi)容鳞贷。
我們逐一地對(duì)它們進(jìn)行介紹,并最終給出一些例子以讓你對(duì)它們的協(xié)同工作有一個(gè)了解虐唠。
你可以指定的權(quán)限可以分為三種類型:
數(shù)據(jù)庫(kù)/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限
alter: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引
create: 建立新的數(shù)據(jù)庫(kù)或數(shù)據(jù)表
delete: 刪除表的記錄
drop: 刪除數(shù)據(jù)表或數(shù)據(jù)庫(kù)
index: 建立或刪除索引
insert: 增加表的記錄
select: 顯示/搜索表的記錄
update: 修改表中已存在的記錄
全局管理MySQL用戶權(quán)限
file: 在MySQL服務(wù)器上讀寫文件
PROCESS: 顯示或殺死屬于其它用戶的服務(wù)線程
RELOAD: 重載訪問(wèn)控制表搀愧,刷新日志等
SHUTDOWN: 關(guān)閉MySQL服務(wù)
特別的權(quán)限
ALL: 允許做任何事(和root一樣)
USAGE: 只允許登錄--其它什么也不允許做
二、查看用戶權(quán)限
> show grants for 'user'@'localhost'
> show grants for user;
> show grants for 'user'@'%'
三疆偿、例子
1.創(chuàng)建一個(gè)表咱筛,并授權(quán)特定用戶
> CREATE DATABASE ?IF NOT EXISTS test? DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
> grant all privileges on test* to 'test_user'@'%' IDENTIFIED BY 'Test@123';
> ?flush privileges;
ON 子句中test.* 說(shuō)明符的意思是“test數(shù)據(jù)庫(kù)所有的表”?
2. 授予root用戶遠(yuǎn)程權(quán)限
> grant all privileges ?on *.* to 'root'@'%' ?indentified by 'Root@123' with grant option;
> ??flush privileges;
ON 子句中*.* 說(shuō)明符的意思是“所有數(shù)據(jù)庫(kù),所有的表”
with grant option允許你把你自己擁有的那些權(quán)限授給其他的用戶
3.增加一個(gè)用戶test密碼為Test@123杆故,讓他可以在任何主機(jī)上登錄迅箩,并對(duì)所有數(shù)據(jù)庫(kù)有查詢、插入反番、修改沙热、刪除的權(quán)限
> grant select,insert,update,delete on *.* to?test@"%" Identified by "Test@123";
> ?flush privileges;
4.增加一個(gè)用戶test密碼為Test@123,, 讓他只可以在localhost上登錄罢缸,并可以對(duì)數(shù)據(jù)庫(kù)testdb進(jìn)行查詢篙贸、插入、修改枫疆、刪除的操作
> grant select,insert,update,delete on testdb.* to?test@localhostidentified by "Test@123";
> ?flush privileges;
5.MySQL創(chuàng)建只讀賬號(hào)
> GRANT SElECT ON *.* TO 'reader'@'%'? ?IDENTIFIED BY "passwd";
> ?flush privileges;
6.MySQL賦權(quán)與權(quán)限回收(grant&revoke)
給用戶cacti賦予所有庫(kù)的所有權(quán)限
> GRANT ALL PRIVILEGES ON *.* TO 'cacti'@'%' IDENTIFIED BY 'cacti' WITH GRANT OPTION;
> FLUSH PRIVILEGES;
權(quán)限回收(不包含賦權(quán)權(quán)限)
> REVOKE ALL PRIVILEGES ON *.* FROM cacti;
> REVOKE ALL PRIVILEGES ON cacti.* FROM cacti;
收回賦權(quán)權(quán)限
> REVOKE GRANT OPTION ON *.* FROM cacti;
> FLUSH PRIVILEGES;
為什么使用了grant all on db.* to user identified by "passwd"后爵川,在主機(jī)上訪問(wèn)數(shù)據(jù)庫(kù)還會(huì)出現(xiàn)ERROR 1045 (28000): Access denied for user'user'@'localhost'(using password: YES) 的錯(cuò)誤提示?
運(yùn)行命令 grant all on db.* to'user'@'localhost'identified by "pass"
當(dāng)不加@選項(xiàng)時(shí)息楔,效果與加@'%'是一樣的寝贡,'%'從名義上包括任何主機(jī)扒披,(%必須加上引號(hào),不然與@放在一起可能不會(huì)被辨認(rèn)出)
不過(guò)有些時(shí)候(有些版本)'%'不包括localhost圃泡,要單獨(dú)對(duì)@'localhost'進(jìn)行賦值!
正確的操作是:
> ?grant all on db.* to 'user'@'%' identified by "passwd";
> ??grant all on db.* to 'user'@'localhost' identified by "passwd";
> ?flush privileges;