1) 權(quán)限的授予與回收
創(chuàng)新互聯(lián)建站主營(yíng)賀蘭網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),賀蘭h5微信平臺(tái)小程序開發(fā)搭建,賀蘭網(wǎng)站營(yíng)銷推廣歡迎賀蘭等地區(qū)企業(yè)咨詢
方法一:MySQL 的權(quán)限系統(tǒng)相關(guān)權(quán)限信息主要存儲(chǔ)在幾個(gè)被稱為grant tables 的系統(tǒng)表中,即: mysql.User,mysql.db,mysql.Host,mysql.table_priv 和mysql.column_priv。手工修改了權(quán)限相關(guān)的表之后,都需要執(zhí)行“FLUSH PRIVILEGES”命令重新加載MySQL的權(quán)限信息;
方法二:通過(guò)GRANT,REVOKE 或者DROP USER 命令來(lái)修改相關(guān)權(quán)限,則不需要手工執(zhí)行FLUSH PRIVILEGES 命令;因?yàn)橥ㄟ^(guò)GRANT,REVOKE 或者DROP USER 命令所做的權(quán)限修改在修改系統(tǒng)表的同時(shí)也會(huì)更新內(nèi)存結(jié)構(gòu)中的權(quán)限信息。在MySQL5.0.2 或更高版本的時(shí)候,MySQL 還增加了CREATE USER 命令,以此創(chuàng)建無(wú)任何特別權(quán)限(僅擁有初始USAGE權(quán)限)的用戶,通過(guò)CREATE USER 命令創(chuàng)建新了新用戶之后,新用戶的信息也會(huì)自動(dòng)更新到內(nèi)存結(jié)構(gòu)中。所以,建議讀者一般情況下盡量使用GRANT,REVOKE,CREATE USER 以及DROP USER 命令來(lái)進(jìn)行用戶和權(quán)限的變更操作,盡量減少直接修改grant tables 來(lái)實(shí)現(xiàn)用戶和權(quán)限變更的操作。
2) 查看授予的權(quán)限
查看某個(gè)用戶目前擁有的權(quán)限,這可以通過(guò)兩個(gè)方式實(shí)現(xiàn):
首先是通過(guò)執(zhí)行“SHOW GRANTS FOR 'username'@'hostname'” 命令來(lái)獲取之前該用戶身上的所有授權(quán)。
另一種方法是查詢grant tables 里面的權(quán)限信息。
3) 權(quán)限級(jí)別
MySQL 中的權(quán)限分為五個(gè)級(jí)別,分別如下:
權(quán)限 |
Global |
Database |
Table |
Column |
Routine |
INSERT |
Y |
Y |
Y |
Y |
|
SELECT |
Y |
Y |
Y |
Y |
|
UPDATE |
Y |
Y |
Y |
Y |
|
ALTER |
Y |
Y |
Y |
||
CREATE |
Y |
Y |
Y |
||
DELETE |
Y |
Y |
Y |
||
DROP |
Y |
Y |
Y |
||
INDEX |
Y |
Y |
Y |
||
ALTER ROUTINE |
Y |
Y |
Y |
||
EXECUTE |
Y |
Y |
Y |
||
ALL [PRIVILEGES] |
Y |
Y |
|||
CREATE ROUTINE |
Y |
Y |
|||
CREATE TABLESPACE |
Y |
Y |
|||
CREATE TEMPORARY TABLES |
Y |
Y |
|||
CREATE VIEW |
Y |
Y |
|||
EVENT |
Y |
Y |
|||
GRANT OPTION |
Y |
Y |
|||
LOCK TABLES |
Y |
Y |
|||
PROXY |
Y |
Y |
|||
REFERENCES |
Y |
Y |
|||
SHOW DATABASES |
Y |
Y |
|||
SHOW VIEW |
Y |
Y |
|||
TRIGGER |
Y |
Y |
|||
CREATE USER |
Y |
||||
FILE |
Y |
||||
PROCESS |
Y |
||||
RELOAD |
Y |
||||
REPLICATION CLIENT |
Y |
||||
REPLICATION SLAVE |
Y |
||||
SHUTDOWN |
Y |
||||
SUPER |
Y |
||||
USAGE |
Y |
(1)Global Level
要授予Global Level 的權(quán)限,則只需要在執(zhí)行GRANT 命令的時(shí)候,用“*.*”來(lái)指定適用范圍是Global 的即可,當(dāng)有多個(gè)權(quán)限需要授予的時(shí)候,也并不需要多次重復(fù)執(zhí)行GRANT命令,只需要一次將所有需要的權(quán)限名稱通過(guò)逗號(hào)(“,”)分隔開即可,如下:
mysql> GRANT SELECT,UPDATE,DELETE,INSERT ON *.* TO 'def'@'localhost';
(2)Database Level
如果要授予Database Level 的權(quán)限,則可以有兩種實(shí)現(xiàn)方式:
1、在執(zhí)行GRANT 命令的時(shí)候,通過(guò)“database.*”來(lái)限定權(quán)限作用域?yàn)閐atabase 整個(gè)數(shù)據(jù)庫(kù),如下:
root@localhost : mysql 06:06:26> GRANT ALTER ON test.* TO 'def'@'localhost';
2、先通過(guò)USE 命令選定需要授權(quán)的數(shù)據(jù)庫(kù),然后通過(guò)“*”來(lái)限定作用域,這樣授權(quán)的作用域?qū)嶋H上就是當(dāng)前選定的整個(gè)數(shù)據(jù)庫(kù)。
root@localhost : mysql 06:14:05> USE test;
root@localhost : test 06:13:10> GRANT DROP ON * TO 'def'@'localhost';
在授予權(quán)限的時(shí)候,如果有相同的權(quán)限需要授予多個(gè)用戶,我們也可以在授權(quán)語(yǔ)句中一次寫上多個(gè)用戶信息,通過(guò)逗號(hào)(,)分隔開就可以了,如下:
root@localhost : mysql 05:22:32> grant create on perf.* to'abc'@'localhost','def'@'localhost';
(3)Table Level
Table Level 的權(quán)限作用范圍是授權(quán)語(yǔ)句中所指定數(shù)據(jù)庫(kù)的指定表。如可以通過(guò)如下語(yǔ)句給test 數(shù)據(jù)庫(kù)的t1 表授權(quán):
root@localhost : test 12:02:15> GRANT INDEX ON test.t1 TO
上面的授權(quán)語(yǔ)句在測(cè)試給test 數(shù)據(jù)庫(kù)的t1 表授予Table Level 的權(quán)限的同時(shí),還測(cè)試了將權(quán)限授予含有通配符“%”的所有“.jianzhaoyang.com”主機(jī)。其中的USAGE 權(quán)限是每個(gè)用戶都有的最基本權(quán)限。
(4)Column Level
Column Level 的權(quán)限授權(quán)語(yǔ)句語(yǔ)法基本和Table Level 差不多,只是需要在權(quán)限名稱后面將需要授權(quán)的列名列表通過(guò)括號(hào)括起來(lái),如下:
root@localhost : test 12:14:46> GRANT SELECT(id,value) ON test.t2 TO
注意:當(dāng)某個(gè)用戶在向某個(gè)表插入(INSERT)數(shù)據(jù)的時(shí)候,如果該用戶在該表中某列上面沒(méi)有INSERT 權(quán)限,則該列的數(shù)據(jù)將以默認(rèn)值填充。這一點(diǎn)和很多其他的數(shù)據(jù)庫(kù)都有一些區(qū)別,是MySQL 自己在SQL 上面所做的擴(kuò)展。
(5)Routine Level
Routine Level 的權(quán)限主要只有EXECUTE 和ALTER ROUTINE 兩種,主要針對(duì)的對(duì)象是procedure 和function 這兩種對(duì)象,在授予Routine Level 權(quán)限的時(shí)候,需要指定數(shù)據(jù)庫(kù)和相關(guān)對(duì)象,如:
root@localhost : test 04:03:26> GRANT EXECUTE ON test.p1 to
除了上面幾類權(quán)限之外,還有一個(gè)非常特殊的權(quán)限GRANT,擁有GRANT 權(quán)限的用戶可以將自身所擁有的任何權(quán)限全部授予其他任何用戶,所以GRANT 權(quán)限是一個(gè)非常特殊也非常重要的權(quán)限。GRANT 權(quán)限的授予方式也和其他任何權(quán)限都不太一樣,通常都是通過(guò)在執(zhí)行GRANT 授權(quán)語(yǔ)句的時(shí)候在最后添加WITH GRANT OPTION 子句達(dá)到授予GRANT 權(quán)限的目的。此外,我們還可以通過(guò)GRANT ALL 語(yǔ)句授予某個(gè)Level 的所有可用權(quán)限給某個(gè)用戶,如:
root@localhost : test 04:15:48> grant all on test.t5 to 'abc';
root@localhost : test 04:27:39> grant all on perf.* to 'abc';
在以上五個(gè)Level 的權(quán)限中,Table、Column 和Routine 三者在授權(quán)中所依賴(或者引用)的對(duì)象必須是已經(jīng)存在的,而不像Database Level 的權(quán)限授予,可以在當(dāng)前不存在該數(shù)據(jù)庫(kù)的時(shí)候就完成授權(quán)。
【參考】
【1】MySQL性能調(diào)優(yōu)與架構(gòu)設(shè)計(jì) PDF中文版全冊(cè).pdf,http://www.linuxidc.com/