2.Mysql的角色管理
1.Mysql角色
Mysql从8.0开始就支持roles,这个在Oracle可是一直存在的,然后Mysql终于在8.0上开始支持了。
2.什么是Mysql的roles?
Mysql的roles说直白就是一堆权限的集合,然后给这个集合称为roles,roles可以对账户分配一组特权,并提供一种方便授权个人特权的替代方案,然后roles特点:
- Roles可以被创建也可以被删除
- Roles可以被授权权限,也可以被撤销权限
- 可以向用户账号授权角色,可以从用户账户撤销角色
- 一个账户的active roles 可以从授予该账户的角色中选择,并且可以在该账户的会话期间更改
- 查看数据库的所有角色:可以通过查看mysql.role_edges 表
3. Roles的语法
3.1 创建和删除role
1.CREATE ROLE [IF NOT EXISTS] role [, role ] ... e.g: CREATE ROLE 'admin', 'developer'; CREATE ROLE 'webapp'@'localhost'; 2. DROP ROLE [IF EXISTS] role [, role ] ... e.g: DROP ROLE 'admin', 'developer'; DROP ROLE 'webapp'@'localhost';
3.2 给role授权和撤销权限
1.GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost'; GRANT SELECT ON world.* TO 'role3'; 2.REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost'; REVOKE 'role1', 'role2' FROM 'user1'@'localhost', 'user2'@'localhost'; REVOKE SELECT ON world.* FROM 'role3';
3.3 SET DEFAULT ROLE
specifies which account roles are active by default.
SET DEFAULT ROLE 'admin', 'developer' TO 'joe'@'10.0.0.1';
3.4 SET ROLE
changes the active roles within the current session.
SET ROLE DEFAULT; SET ROLE 'role1', 'role2'; SET ROLE ALL; SET ROLE ALL EXCEPT 'role1', 'role2';
3.5 The CURRENT_ROLE()
function displays the active roles within the current session
mysql> SELECT CURRENT_ROLE(); +-------------------+ | CURRENT_ROLE() | +-------------------+ | `r1`@`%`,`r2`@`%` | +-------------------+ mysql> SET ROLE 'r1'; SELECT CURRENT_ROLE(); +----------------+ | CURRENT_ROLE() | +----------------+ | `r1`@`%` | +----------------+
4. 创建Role模版
1. 创建role
CREATE ROLE 'app_developer', 'app_read', 'app_write';
2. 为Role授权一些权限(集合) GRANT ALL ON app_db.* TO 'app_developer'; GRANT SELECT ON app_db.* TO 'app_read'; GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';
3.创建用户 CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass'; CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass'; CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass'; CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';
4.为用户授权role GRANT 'app_developer' TO 'dev1'@'localhost'; GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost'; GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';
5.激活角色
角色创建并授权之后之后,要赋给用户并处于激活状态才能使用
激活方式1:
登录创建的用户,查看角色是否被激活:select current_role(); 如果这里显示的None的话,表示未激活
可以登录应用用户进行手工激活: set role 角色名
或者用超级用户执行如下命令:表示应用用户一登录就立马激活角色
SET DEFAULT ROLE ALL TO 'dev1'@'localhost', 'read_user1'@'localhost', 'read_user2'@'localhost', 'rw_user1'@'localhost';
激活方式二:
强制角色:系统参数mandatory_roles指定对整个数据库起作用的角色.
To specify mandatory roles at server startup, define mandatory_roles
in your server my.cnf
file:
[mysqld] mandatory_roles='role1,role2@localhost,r3@%.example.com'
To set and persist mandatory_roles
at runtime, use a statement like this:
SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com';
6.检查角色
mysql> SHOW GRANTS FOR 'dev1'@'localhost'; # 这个可以查看用户下面的权限和角色 mysql> SHOW GRANTS FOR 'dev1'@'localhost' USING 'app_developer'; # 这个可以查看这个所属角色下面的所有权限
查考:https://dev.mysql.com/doc/refman/8.0/en/roles.html#roles-checking
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!