说明:
- 用户由‘username‘@’hostname’组成
- 角色由‘role_name‘@’host_name’组成
- 只要你创建了一个用户或角色,系统就会自动给你一个“USAGE”权限,意思是连接登录数据库的权限
1. 创建用户
1 | CREATE USER 用户 [IDENTIFIED BY '密码'][,用户 [IDENTIFIED BY '密码']]; |
举例:
1 | CREATE USER 'zzr'@'localhost' IDENTIFIED BY '123456'; |
2. 修改用户名
1 | UPDATE mysql.user SET user='li4' WHERE user='wang5'; |
3. 删除用户
1 | DROP USER 用户[,用户]…; |
举例:
1 | DROP USER 'zzr'@'localhost'; |
4. 修改密码
方式一:
1 | ALTER USER 用户 IDENTIFIED BY '新密码'[,用户[IDENTIFIED BY '新密码']]…; |
说明:USER()函数可以获取当前用户,用户位置填USER()可以实现对当前用户密码的修改
方式二:
1 | SET PASSWORD[FOR 用户]='新密码'; |
说明:不写[ ]部分默认修改当前用户,写[ ]部分可实现root用户对其他用户密码的修改
5. 权限管理
5.1 权限列表
1 | show privileges; |
5.2 授予权限
1 | GRANT 权限1,权限2,…权限n ON 数据库名称.表名称 TO 用户 [IDENTIFIED BY ‘密码口令’][WITH GRANT OPTION]; |
- WITH GRANT OPTION 表示用户赋予权限后可以给其他用户赋予自己持有的权限
- 该权限如果发现没有该用户,则会直接新建一个用户。
- 举例:给li4用户用本地命令行方式,授予atguigudb这个库下的所有表的插删改查的权限。
1 | GRANT SELECT,INSERT,DELETE,UPDATE ON atguigudb.* TO li4@localhost; |
- 举例:授予通过网络方式登录的joe用户 ,对所有库所有表的全部权限,密码设为123。
1 | GRANT ALL PRIVILEGES ON *.* TO joe@'%' IDENTIFIED BY '123'; |
5.3 查看权限
- 查看当前用户权限
1 | SHOW GRANTS; |
- 查看某用户的全局权限
1 | SHOW GRANTS FOR 用户; |
5.4 收回权限
注意:在将用户账户从user表删除之前,应该收回相应用户的所有权限。
- 收回权限命令
1 | REVOKE 权限1,权限2,…权限n ON 数据库名称.表名称 FROM 用户; |
- 举例
1 | #收回全库全表的所有权限 |
- 注意:须用户重新登录后才能生效
6. 角色管理
6.1 创建角色
1 | CREATE ROLE 角色1 [,角色2]... |
如果host_name省略,默认为%,role_name不可省略
6.2 给角色赋予权限
1 | GRANT 权限名 ON 数据库名称.表名称 TO 角色; |
6.3 查看角色的权限
1 | SHOW GRANTS FOR 角色; |
6.4 回收角色的权限
1 | REVOKE 权限名 ON 数据库名称.表名称 FROM 角色; |
6.5 删除角色
1 | DROP ROLE 角色1 [,角色2]... |
注意:如果你删除了角色,那么用户也就失去了通过这个角色所获得的所有权限
6.6 给用户赋予角色
角色创建并授权后,要赋给用户并处于激活状态才能发挥作用。
1 | GRANT 角色1 [,角色2,...] TO 用户1 [,用户2,...]; |
查询当前已激活的角色
1 | SELECT CURRENT_ROLE(); |
6.7 激活角色
方式1:使用set default role 命令激活角色
1 | SET DEFAULT ROLE ALL TO 用户; |
方式2:将activate_all_roles_on_login设置为ON
1 | SET GLOBAL activate_all_roles_on_login=ON; |
这条 SQL 语句的意思是,对所有角色永久激活
6.8 撤销用户的角色
1 | REVOKE 角色 FROM 用户; |
以上来自资料整理
- 本文作者: zzr
- 本文链接: http://zzruei.github.io/2023/01bef2b83e.html
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!