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 操作函数权限

当用户发出操作请求时

  1. Mysql检查user表中的权限信息 匹配user、host字段值,查看全局权限是否允许,如果找到匹配信息。则执行操作,否则继续向下查找权限
  2. 检查db表中的权限信息 匹配user、host值,查看请求的数据库级别的权限是否允许,如果找到匹配结果,则执行操作,否则继续向下查找权限
  3. 检查tables_priv表中的权限信息,匹配user、host值,查看请求的数据表级别是否允许,如果找到匹配结果,则执行操作,否则继续向下查找权限
  4. 检查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 `用户`@`%`
posted @ 2022-04-21 14:16  Fang思楠  阅读(146)  评论(0编辑  收藏  举报