前言
随着业务和团队规模的发展,数据库的权限控制越来越精细化.我们需要控制好每个数据库账号的操作权限.
权限在数据库中的存储
用户的权限是存储在数据库information_schema 中的权限表中的. 相关的权限表如下:
SCHEMA_PRIVILEGES 存储库级权限COLUMN_PRIVILEGES 存储列级权限TABLE_PRIVILEGES 存储表级权限USER_PRIVILEGES 存储用户级权限
表级权限
给test 库的全部表增加授权,这个时候权限是加在库级的.也就是存储在SCHEMA_PRIVILEGES 表中
GRANT select,update on test.* to 'develop'@'%';
移除权限
revoke select on `test`.* from 'develop'@'%';
关键点: revoke to 变成了from
排除某个表的select 权限
mysql表中没有反向标记的字段,只有赋权,没有禁止.所以这里只能将剩余的表都赋权.
在赋权后要移除库级的select权限
select concat("GRANT select on test.`",table_name,"` to 'develop'@'%';")
from tables
where table_schema='test' and table_type='base table' and table_name<>'account';
将执行结果复制出来单独全部执行即可.
|