Mysql8.0 用户管理

密码加密方式变更

  • 特别说明
    MySQL8.0中验证插件和密码加密方式默认为caching_sha2_password,之前是的版本是mysql_native_password,这一点很重要,还有一些管理工具不支持这个。

  • 切换加密方式

  1. 配置文件配置
[mysqld]
default_authentication_plugin = mysql_native_password
# 其他配置
****
  1. 创建用户(或修改用户)时指定加密方式
    创建用户
    create user '用户名'@'主机地址' identified with mysql_native_password by '密码';
    修改用户
    alter user '用户名'@'主机地址' identified with mysql_native_password by '新密码';

用户

创建用户

  • 默认加密方式
    create user '用户名'@'主机地址' identified by '密码';
  • 指定加密方式
    create user '用户名'@'主机地址' identified with mysql_native_password by '密码';

修改用户

修改密码

  • 默认加密方式
    alter user '用户名'@'主机地址' identified by '新密码';
  • 指定加密方式
    alter user '用户名'@'主机地址' identified with mysql_native_password by '新密码';

修改用户名

RENAME USER '旧用户'@'主机名' TO '新用户名'@'主机名';

角色(8.0新增)

创建角色

CREATE ROLE '角色名'@'主机名';
CREATE ROLE '角色名';

  • 备注
    角色的名称与MySQL的账户名称非常相似,由用户名+主机名称构成,如果省略主机名称则默认为'%'。

删除角色

DROP ROLE '角色名'@'主机';

强制角色

MySQL可以通过mandatory_roles 变量来配置强制性角色。使用强制性角色,服务器会为全部的账户默认赋予该角色,而不需要显示执行赋予角色。可用my.cnf(my.ini)文件或者使用SET PERSIST进行配置,例如:

[mysqld]
mandatory_roles='role1,role2@localhost'

SET PERSIST mandatory_roles = 'role1,role2@localhost;
  • 注意:配置在mandatory_roles中的角色不能撤销其权限,也不能删除。

角色生效

  • 在一个连接会话中,用户的角色可以是生效的也可以是失效的。生效则该用户拥有这个角色的权限,失效则没有这个角色的权限。
    可以使用select current_role();查询当前会话生效的角色

    没有生效角色

  • 默认情况下,向帐户赋予角色或在mandatory_roles系统变量值中为其命名后,该角色在帐户会话中不会变为活动状态。要指定每次用户连接到服务器,进行身份验证时激活角色,请使用 SET DEFAULT ROLE:

# 取消连接激活默认角色
set default role NONE to '用户名'@'主机'
# 链接时激活所有角色
set default role ALL to '用户名'@'主机'
# 链接时激活某个角色
set default role 角色名 to '用户名'@'主机'
  • 要在用户连接到服务器时,使所有显式赋予的角色和强制角色自动激活,请启用activate_all_roles_on_login 系统变量。默认情况下,禁用自动角色激活。

权限

授权

直接给用户授权

mysql> grant 权限列表 on 库.表 to '用户名'@'主机地址';
mysql> flush privileges;
  • 权限列表说明
权限 作用范围 作用
all 服务 所有权限
select 表、列 选择行
insert 表、列 插入行
update 表、列 更新行
delete 删除行
create 数据库、表、索引 创建
drop 数据库、表、视图 删除
reload 服务器 允许使用flush语句
shutdown 服务器 关闭服务
process 服务器 查看线程信息
file 服务器 文件操作
grant option 数据库、表、存储过程 授权
references 数据库、表 外键约束的父表
index 创建/删除索引
alter 修改表结构
show databases 服务器 查看数据库名称
super 服务器 超级权限
create temporary tables 创建临时表
lock tables 数据库 锁表
execute 存储过程 执行
replication client 服务器 允许查看主/从/二进制日志状态
replication slave 服务器 主从复制
create view 视图 创建视图
show view 视图 查看视图
create routine 存储过程 创建存储过程
alter routine 存储过程 修改/删除存储过程
create user 服务器 创建用户
event 数据库 创建/更改/删除/查看事件
trigger 触发器
create tablespace 服务器 创建/更改/删除表空间/日志文件
proxy 服务器 代理成为其它用户
usage 服务器 没有权限
  • 示例

grant SELECT on test.* to 'test'@'%';
grant SELECT, INSERT on test.* to 'test'@'%';

取消用户授权

REVOKE 权限列表 ON 库.表 FROM '用户名'@'主机名';

  • 示例
    REVOKE SELECT ON test.* FROM 'test'@'%';

给角色授权(新)

grant 权限列表 on 库.表 to 角色名

  • 示例
    grant SELECT on test.* to dev

分配用户角色(新)

grant '角色名' to '用户名'@'主机名';

取消用户角色(新)

revoke '角色名' from '用户名'@'主机名';

取消角色授权(新)

revoke 权限列表 on 库.表 from '角色名';

查询权限

查询当前登陆用户权限

show grants;

查询其他用户权限

show grants for '用户名'@'主机';

  • 示例
Grants for [email protected]
GRANT USAGE ON *.* TO `test`@`127.0.0.1`
GRANT ALL PRIVILEGES ON `eway_ims`.* TO `test`@`127.0.0.1`
GRANT `test`@`%` TO `test`@`127.0.0.1`(返回结果中,像此条结果就是该用户授予的角色)

查询角色权限

show grants for '角色名';

查询用户某个角色的权限

show grants for '用户名'@'主机' using '角色名';

最后

修改完权限前往不要忘记 flush privileges;

修改完权限前往不要忘记 flush privileges;

修改完权限前往不要忘记 flush privileges;

原创不易,点个赞再走吧。。。。

你可能感兴趣的:(Mysql8.0 用户管理)