長連接與用戶權(quán)限
當(dāng)客戶端賬號(hào)密碼與服務(wù)器建立連接時(shí)挨厚,MySQL會(huì)讀取該賬號(hào)的所有權(quán)限并緩存剖毯,并在該連接持續(xù)期間使用這些權(quán)限旺坠,其他會(huì)話修改該賬號(hào)權(quán)限,不會(huì)影響已有會(huì)話連接,僅對(duì)新創(chuàng)建的會(huì)話連接生效蛹稍。
用戶權(quán)限驗(yàn)證順序
用戶使用host竹捉、user、password 三項(xiàng)來驗(yàn)證登錄陌选,然后按照user>>db>>tables_priv>>columns_priv來得到用戶權(quán)限。
對(duì)于相同用戶名的登錄用戶,在進(jìn)行匹配hostname時(shí)秧倾,按照最全匹配方式來匹配,如假設(shè)分別有以下授權(quán)用戶:
user1@'192.168.1.1'
user1@'192.168.1.%'
user1@'192.%'
當(dāng)user1用戶登錄時(shí)傀缩,先看登錄IP是否匹配192.168.1.1那先,再看登錄IP是否匹配192.168.1.%,最后看登錄IP是否匹配192.%
實(shí)例級(jí)別授權(quán)
##授予用戶所有數(shù)據(jù)庫上的SELECT 權(quán)限
##授權(quán)后在mysql.user表的Select_priv=Y
GRANT SELECT ON *.* TO gga@localhost;
SELECT * FROM mysql.user where user='gga' \G
##取消上面授權(quán)
REVOKE SELECT ON *.* FROM gga@localhost;
數(shù)據(jù)庫級(jí)別級(jí)別授權(quán)
##授予用戶數(shù)據(jù)庫上test的所有表的SELECT權(quán)限
##授權(quán)后在mysql.db表的Select_priv=Y
GRANT SELECT ON testdb1.* TO gga@localhost;
SELECT * FROM mysql.db WHERE User='gga' \G
##取消上面授權(quán)
REVOKE SELECT ON testdb1.* FROM gga@localhost;
表級(jí)別級(jí)別授權(quán)
##授予用戶數(shù)據(jù)庫上test的tb001表的SELECT權(quán)限
##授權(quán)后在mysql.db表的Select_priv=Y
GRANT SELECT ON testdb1.tb001 TO gga@localhost;
SELECT * FROM mysql.tables_priv WHERE User='gga' \G
##取消上面授權(quán)
REVOKE SELECT ON testdb1.tb001 FROM gga@localhost;
MySQL特殊權(quán)限
USAGE 權(quán)限只用用于數(shù)據(jù)庫登錄赡艰,不能執(zhí)行任何操作,usage 權(quán)限不能被回收售淡。
ALL: 允許做任何事(和root一樣)。
MySQL數(shù)據(jù)庫/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限
Alter: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引。
Create: 建立新的數(shù)據(jù)庫或數(shù)據(jù)表揖闸。
Delete: 刪除表的記錄揍堕。
Drop: 刪除數(shù)據(jù)表或數(shù)據(jù)庫。
INDEX: 建立或刪除索引汤纸。
Insert: 增加表的記錄衩茸。
Select: 顯示/搜索表的記錄。
Update: 修改表中已存在的記錄贮泞。
MySQL全局管理權(quán)限
FILE: 在MySQL服務(wù)器上讀寫文件楞慈。
PROCESS: 顯示或殺死屬于其它用戶的服務(wù)線程。
RELOAD: 重載訪問控制表啃擦,刷新日志等囊蓝。
SHUTDOWN: 關(guān)閉MySQL服務(wù)。