Mysql權限系統總結

Mysql權限系統總結

 

存儲權限信息的幾個grant tables的系統表。

 mysql.usermysql.dbmysql.Hostmysql.table_privmysql.column_priv

 Mysql在啓動時,就將所有權限信息Load到內存中。FLUSH PRIVILEGES使權限生效。

 權限授予與去除:

 show grants for 'username'@'hostname'

 權限級別:

 MySQL權限分爲五個級別:

Global Level:

 又稱爲全局權限控制,所有權限信息都保存mysql.user中。針對整個mysqld有效。

 grant select,update,delete,insert on *.* to 'def'@'localhost'

 如果一個權限是以Global Level 來授予的,則會覆蓋其他所有級別的相同權限設置。

Database Level:

 作用域是所指定整個數據庫中的所有對象。所有權限信息都保存mysql.db

 Database Level 主要以下幾個權限:CREATE USERFILEPROCESSRELOADREPLICATION CLIENTREPLICATION SLAVESHOW DATABASESSHUTDOWNSUPER USAGE 這幾個權限

 授予Database Level的權限:

 grant alter on test.* to 'def'@'localhost';

 show grants for def@localhost;

 use test;

 grant drop on * to 'def'@'localhost';

 grant create on perf.* to 'abc'@'localhost','def'@'localhost';

 show grants for def@localhost;

mysql.Host:

配合db權限表對給定主機上數據庫級操作權限作更細緻的控制。這個權限表不受GRANTREVOKE語句的影響

Table Level: 所有權限信息都保存在mysql.table_priv

 table Level的權限作用範圍是授權語句中所指定數據庫的指定表。

 Table Level的權限,僅有ALTERCREATEDELETEDROPINDEXINSERTSELECT, UPDATE 這八種權限。

 grant index on test.t1 to 'abc'@'%.jianzhaoyang.com';

 Column Level: 所有權限信息都保存在mysql.column_priv

 Column Level的權限作用範圍更新,僅僅是某個表的指定的某個列。

 對Column Level 級別的權限僅有INSERTSELECT UPDATE 這三種。

 grant select(id,value) on test.t2 to 'abc'@'%.jianzhaoyang.com';

  Rountine Level:

 Rountine Level的權限主要有EXECUTEAlter ROUTINE兩種。

 主要針對的對象是procedure function 這兩種對象。

 grant execute on test.p1 to 'abc'@'localhost';

 grant all on test.t5 to 'abc';

 

對於Global Level 的權限信息的修改,僅僅只有更改之後新建連接纔會用到,對於Database Level權限信息的修改只有當客戶端執行了"use database_name"命了之後,才生效。

 對於Table LevelColumn Level的權限,則會在下一次需要使用到該權限的Query被請求的時候生效。

 MySQL 在權限校驗過程中,只要找到匹配的權限之後,就不會再繼續往後查找是否還有匹配的權限信息,而直接完成校驗過程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章