MySql用户与权限控制
MySql用户与权限控制
-- 刷新权限命令
# -- 刷新mysql权限命令
flush privileges;
用户管理
1、查看用户
#查看用户
USE mysql;
SELECT host,user FROM user;
2、创建用户.
@‘%’
为host连接,建议进行各种指令操作时带此参数
#创建用户
CREATE USER 'name' identified by 'password'; #创建用户 默认host是%
CREATE USER `name`@`localhost` identified by '000000' #创建本地host连接
3、修改用户
# 3.1、修改用户
UPDATE user SET user ='test2' WHERE user ='test1' AND host = '%'
4、删除用户
# 4、删除用户
DROP user 'test2'; #建议使用
DELETE FROM user WHERE user = 'test2' AND host = '%'; #此方式可能会有残留权限数据 删除不干净
5、修改密码
# 3.2 修改当前链接用户的密码
alter user user() identified by 'new_password'; #写法一
SET PASSWORD= 'new_password';#写法二
# 3.3 修改其他用户的密码 root登陆后
alter user 'test1'@'%' identified by 'new_password'; #写法一
SET PASSWORD FOR 'test1'@'%' = '000000'; #写法二
6、密码过期策略
#设置 test1 用户的密码立刻过期
alter user 'test1'@'%' password expire
#设置密码90天过期
create user "new_user"@"localhost" PASSWORD EXPIRE INTERVAL 90 DAY; #新建用户
alter user "new_user"@"localhost" PASSWORD EXPIRE INTERVAL 90 DAY; #修改用户
#设置密码永不过期
create user "new_user"@"%" PASSWORD EXPIRE NEVER; #新建用户
alter user "new_user"@"%" PASSWORD EXPIRE NEVER; #修改用户
权限管理
1、查看权限
#查看root
SHOW GRANTS
# 或者
SHOW GRANTS FOR CURRENT_USER;
## 查看某个用户的全局权限
SHOW GRANTS FOR 'user'@'%'
2、赋予权限
*.*(库名.表名)
# 赋予用户 所有权限
grant ALL PRIVILEGES ON *.* TO 'new_user'@'%';
# 赋予用户 对 test库的查询和修改权限
grant select,update on test.* to 'new_user'@'%';
# 叠加赋予用户
grant delete on test.* to 'new_user'@'%';
3、回收权限
#回收某个权限
REVOKE UPDATE,DELETE,INSERT ON *.* FROM `username`@`%`; # *.*(库名.表名)
#回收所有的权限
REVOKE ALl PRIVILEGES ON *.* FROM `username`@`%`;
权限表
当mysql建立连接后将数据库用户权限信息写到内存中进行校验
在库名为mysql中以下表:
- user表 用户信息
- db表 操作库权限
- tables_priv 操作表权限
- columns_priv 操作列权限
- procs_priv 操作函数权限
当用户发出操作请求时
- Mysql检查user表中的权限信息 匹配user、host字段值,查看全局权限是否允许,如果找到匹配信息。则执行操作,否则继续向下查找权限
- 检查db表中的权限信息 匹配user、host值,查看请求的数据库级别的权限是否允许,如果找到匹配结果,则执行操作,否则继续向下查找权限
- 检查tables_priv表中的权限信息,匹配user、host值,查看请求的数据表级别是否允许,如果找到匹配结果,则执行操作,否则继续向下查找权限
- 检查columns_priv列中的权限信息,匹配user、host值,查看请求的数据列级别是否允许,如果找到匹配结果,则执行操作,否则mysql返回错误信息
角色管理
1、创建角色
CREATE ROLE 'name'@'%'; #一创建用户1
CREATE ROLE 'name1', 'name2' ... ;#二 创建用户
2、给角色赋予权限
#赋予全部权限
GRANT ALL PRIVILEGES ON 库名.表明 TO '角色名';
#赋予查询删除权限
GRANT SELECT,DELETE ON 库名.表明 TO '角色名';
3、查看角色权限
SHOW GRANTS; #root的权限
SHOW GRANTS FOR "角色名"; #角色名权限
4、回收角色权限
REVOKE UPDATE ON 库名.表名 FROM "角色名";
#回收所有
REVOKE ALl PRIVILEGES ON *.* FROM "角色名";
5、删除角色
DROP ROLE `角色名`
6、激活角色
mysql 创建了角色默认都是未激活状态
#查看当前用户激活状态的角色
SELECT CURRENT_ROLE();
#激活角色 #需要重新登陆后才能查看
set default role `角色名`@`%` TO `用户名`@`%`;
7、给用户赋予角色
GRANT `角色名`@`%` TO `用户名`@`%`;
8、回收用户的角色
REVOKE `角色` FROM `用户`@`%`
本文来自博客园,作者:Fang思楠,转载请注明原文链接:https://www.cnblogs.com/Kuju/p/16173938.html