密码加密方式变更
特别说明
MySQL8.0中验证插件和密码加密方式默认为caching_sha2_password,之前是的版本是mysql_native_password,这一点很重要,还有一些管理工具不支持这个。切换加密方式
- 配置文件配置
[mysqld]
default_authentication_plugin = mysql_native_password
# 其他配置
****
- 创建用户(或修改用户)时指定加密方式
创建用户
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 test@127.0.0.1 |
---|
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;
原创不易,点个赞再走吧。。。。