mysql的权限控制主要是通过mysql库下的db,user,host,table_priv,column_priv表控制。
由于权限信息数据量比较小,所以mysql在启动时会将所有的权限消息加载到内存。
所以每次手工修改相关权限表时需要通过 flush privileges命令来重新加载。
但是如果是通过grant,revoke或drop user,create user等命令这修改权限的话就不需flush
mysql中权限一共有五级,按照大小顺序为:global > database > table > column, routine level是对存储过程或函数操作的
①, Global Level
全局权限控制,所有权限信息存储在mysql.user表中。Global level是针对整个mysqld的。
grant select,create table on *.* to u1 identified by password;
②, Database Level
作用域为指定整个数据库中的所有对象。
grant select,create table on databaseName.* to u1 identified by password;
user database1;
grant drop on * to ‘u1‘@‘%‘, ‘u1‘@localhost,[email protected]‘%‘;
③,Table Level
作用域为指定特定用户下的特定表
grant index on test.t1 to ‘u1‘@localhost
④, Column Level
作用域为特定库下特定表中的某些列。
Column级别的权限有insert,select,update。授权方式: grant select(c1,c2,c3) on test.t1 to ‘u1‘@localhost;
⑤, Routine Level
routine level的权限主要只有execute和alter routine两种,主要针对的对象是procedure和function这两种对象,在授权routine level权限时,需要指定数据库和相关对象。
grant execute on test.p1 to ‘u1‘@‘%‘;