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 在权限校验过程中,只要找到匹配的权限之后,就不会再继续往后查找是否还有匹配的权限信息,而直接完成校验过程。

 

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