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';     
 
      请注意这样配置的角色默认也是没有激活的,还需要使用set role命令将角色激活。
 MySQL中还有一个系统参数activate_all_roles_on_login如果被设置为true,所有用户拥有的角色在登录时都会被自动激活,这个系统参数的默认值是false,默认只有用户的默认角色是激活的。

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 

posted on   太白金星有点烦  阅读(228)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示