权限管理
一、权限列表
-- 查看 MySQL 中所有的权限
show privileges;

1、表权限
select、insert、update、delete、create、drop、grant、references、index、alter
2、列权限
select、insert、update、references
3、过程权限
execut、alert routine、grant

二、权限授予原则
- 只授予能
满足需要的最小权限 - 创建用户的时候
限制用户的登录主机,一般是限制成指定 ip 或者内外 ip 段 - 为每个用户设置
满足密码复杂度的密码 定期清理不需要的用户,回收权限或者删除用户。
三、授予权限
- 角色赋予用户给用户授权
- 直接给用户授权
1、语法
grant 权限1,权限2...权限n on 数据库名称.表名称 to 'username'@'host'
2、授权
在授权的时候,最好指明 username 和 host 。
授予用户 user1 数据库 dbtest1 的增删改查权限
grant select,insert,delete,update on dbtest1.* to user1@localhost;
给 user3 授予所有的权限(grant 权限除外)
grant all privileges on *.* to 'user3'@'localhost';
赋予所有权限,包括 grant 的权限
grant all privileges on *.* to 'user1'@'%' with grant option;
三、查看权限
-- 查看当前用户的权限
show grants;
show grants for current_user;
show grants for current_user();
-- 查看指定用户的权限
show grants for 'username'@'host';
四、权限回收
权限回收的关键字 revoke。
收回用户不必要的权限可以在一定程度上保证系统的安全性。
revoke 权限1,...,权限n on database.table from 'username'@'host';
问题1:
mysql> revoke all privileges on *.* from 'user3'@'localhost';
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
解决方案:授予 root 用户 system_user 角色权限
grant system_user on *.* to 'root'@'';
五、刷新权限
flush privileges;
什么时候需要执行 flush privileges