- 權(quán)限系統(tǒng)的作用是授予來自某個主機(jī)的某個用戶可以查詢、插入、修改、刪除等數(shù)據(jù)庫操作的權(quán)限
- 權(quán)限控制(授權(quán)與回收)的執(zhí)行語句包括create user, grant, revoke
- 授權(quán)后的權(quán)限都會存放在MySQL的內(nèi)部數(shù)據(jù)庫中(數(shù)據(jù)庫名叫mysql),并在數(shù)據(jù)庫啟動之后把權(quán)限信息復(fù)制到內(nèi)存中
權(quán)限級別
權(quán)限存儲在mysql庫的user, db, tables_priv, columns_priv, and procs_priv這幾個系統(tǒng)表中,待MySQL實例啟動后就加載到內(nèi)存中
- 3種權(quán)限級別
1.全局性的管理權(quán)限,作用于整個MySQL實例級別
2.數(shù)據(jù)庫級別的權(quán)限,作用于某個指定的數(shù)據(jù)庫上或者所有的數(shù)據(jù)庫上
3.數(shù)據(jù)庫對象級別的權(quán)限,作用于指定的數(shù)據(jù)庫對象上(表、視圖等)或者所有的數(shù)據(jù)庫對象上 - 查看用戶權(quán)限
# 查看mysql實例默認(rèn)root用戶的權(quán)限
mysql> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
# 比root用戶在幾個權(quán)限系統(tǒng)表中的數(shù)據(jù)
mysql> select * from user where user='root' and host='localhost';
輸出全是Y
mysql> select * from db where user='root' and host='localhost';
Empty set
mysql> select * from tables_priv where user='root' and host='localhost';
Empty set
mysql> select * from columns_priv where user='root' and host='localhost';
Empty set
mysql> select * from procs_priv where user='root' and host='localhost';
Empty set
ALL PRIVILEGES: 權(quán)限代表全局或者全數(shù)據(jù)庫對象級別的所有權(quán)限限配合。如果是rename表名,則要求有alter和drop原表,create和insert新表的權(quán)限
Alter routine權(quán)限代表允許修改或者刪除存儲過程、函數(shù)的權(quán)限
Create權(quán)限代表允許創(chuàng)建新的數(shù)據(jù)庫和表的權(quán)限
Create routine權(quán)限代表允許創(chuàng)建存儲過程、函數(shù)的權(quán)限
Create tablespace權(quán)限代表允許創(chuàng)建、修改、刪除表空間和日志組的權(quán)限
Create temporary tables權(quán)限代表允許創(chuàng)建臨時表的權(quán)限
Create user權(quán)限代表允許創(chuàng)建、修改、刪除、重命名user的權(quán)限
Create view權(quán)限代表允許創(chuàng)建視圖的權(quán)限
Delete權(quán)限代表允許刪除行數(shù)據(jù)的權(quán)限
Drop權(quán)限代表允許刪除數(shù)據(jù)庫、表、視圖的權(quán)限,包括truncate table命令
Event權(quán)限代表允許查詢,創(chuàng)建,修改,刪除MySQL事件
Execute權(quán)限代表允許執(zhí)行存儲過程和函數(shù)的權(quán)限
File權(quán)限代表允許在MySQL可以訪問的目錄進(jìn)行讀寫磁盤文件操作,可使用的命令包括load data infile,select … into outfile,load file()函數(shù)
Grant option權(quán)限代表是否允許此用戶授權(quán)或者收回給其他用戶你給予的權(quán)限
Index權(quán)限代表是否允許創(chuàng)建和刪除索引
Insert權(quán)限代表是否允許在表里插入數(shù)據(jù),同時在執(zhí)行analyze table,optimize
table,repair table語句的時候也需要insert權(quán)限
Lock權(quán)限代表允許對擁有select權(quán)限的表進(jìn)行鎖定,以防止其他鏈接對此表 的讀或?qū)?br>
mysqladmin processlist, show engine等命令
? Reference權(quán)限是在5.7.6版本之后引入,代表是否允許創(chuàng)建外鍵
? Reload權(quán)限代表允許執(zhí)行flush命令,指明重新加載權(quán)限表到系統(tǒng)內(nèi)存中,refresh命令代表關(guān)閉和重新開啟日志文件并刷新所有的表
? Replication client權(quán)限代表允許執(zhí)行show master status,showslave status,showbinary logs命令
? Replication slave權(quán)限代表允許slave主機(jī)通過此用戶連接master以便建立主從復(fù)制關(guān)系
? Select權(quán)限代表允許從表中查看數(shù)據(jù),某些不查詢表數(shù)據(jù)的select執(zhí)行則不需要此權(quán)限,如Select 1+1,Select PI()+2;而且select權(quán)限在執(zhí)行update/delete語句中含有where條件的情況下也是需要的
? Show databases權(quán)限代表通過執(zhí)行show databases命令查看所有的數(shù)據(jù)庫名
? Show view權(quán)限代表通過執(zhí)行show create view命令查看視圖創(chuàng)建的語句Shutdown權(quán)限代表允許關(guān)閉數(shù)據(jù)庫實例,執(zhí)行語句包括mysqladminshutdown
? Super權(quán)限代表允許執(zhí)行一系列數(shù)據(jù)庫管理命令,包括kill強(qiáng)制關(guān)閉某個連接命令,change master to創(chuàng)建復(fù)制關(guān)系命令,以及create/alter/drop server等命令
? Trigger權(quán)限代表允許創(chuàng)建,刪除,執(zhí)行,顯示觸發(fā)器的權(quán)限
? Update權(quán)限代表允許修改表中的數(shù)據(jù)的權(quán)限
? Usage權(quán)限是創(chuàng)建一個用戶之后的默認(rèn)權(quán)限,其本身代表連接登錄權(quán)限
mysql> create user t1@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for t1@localhost;
+----------------------------------------+
| Grants for t1@localhost |
+----------------------------------------+
| GRANT USAGE ON *.* TO 't1'@'localhost' |
+----------------------------------------+
系統(tǒng)權(quán)限表
權(quán)限存儲在mysql庫的user,db, tables_priv, columns_priv, and procs_priv這幾個系統(tǒng)表中,待MySQL實例啟動后就加載到內(nèi)存中
- User表
存放用戶賬戶信息以及全局級別(所有數(shù)據(jù)庫)權(quán)限,決定了來自哪些主機(jī)的哪些用戶可以訪問數(shù)據(jù)庫實例,如果有全局權(quán)限則意味著對所有數(shù)據(jù)庫都有此權(quán)限 - Db表
存放數(shù)據(jù)庫級別的權(quán)限,決定了來自哪些主機(jī)的哪些用戶可以訪問此數(shù)據(jù)庫 - Tables_priv表
存放表級別的權(quán)限,決定了來自哪些主機(jī)的哪些用戶可以訪問數(shù)據(jù)庫的這個表 - Columns_priv表
存放列級別的權(quán)限,決定了來自哪些主機(jī)的哪些用戶可以訪問數(shù)據(jù)庫表的這個字段 - Procs_priv表
存放存儲過程和函數(shù)級別的權(quán)限