首页 > 数据库 >MySQL 8新特性--角色

MySQL 8新特性--角色

时间:2022-09-29 12:08:42浏览次数:59  
标签:mandatory roles 角色 -- MySQL ROLE mysql role


3.角色

从MySQL8.0开始支持角色,和Oracle中的角色一样,角色就是权限的集合。
MySQL中当前支持的关于角色的相关操作和变量:

  • CREATE ROLE和DROP ROLE
  • GRANT和REVOKE
  • SHOW GRANTS
  • SET DEFAULT FOLE
  • SET ROLE
  • CURRENT_ROLE()
  • mandatory_roles和activate_all_roles_on_login系统变量

下面将详细的介绍关于角色的相关操作,说明

3.1.创建角色并赋权限

创建三个角色,分别是数据库管理员角色,读角色,写角色

mysql> create role 'dba_role','read_role','write_role';
Query OK, 0 rows affected (0.08 sec)

–赋权限

mysql> grant ALL ON *.* TO 'dba_role';
Query OK, 0 rows affected (0.18 sec)
mysql> grant SELECT ON *.* TO ' read_role';
Query OK, 0 rows affected (0.12 sec)
mysql> grant INSERT,UPDATE,DELETE ON *.* TO 'write_role';
Query OK, 0 rows affected (0.17 sec)

–将角色赋给相应的用户,如:

grant dba_role to ' lei '@ ' %';

3.2.定义强制性角色

所谓的强制性角色,就是该角色会赋给数据库中的所有用户。可以通过变量mandatory_roles指定,如下:

[mysqld]
mandatory_roles='dba_role,test_role@localhost,read_role@%.test.com'

或在数据库运行期间设置

SET PERSIST mandatory_roles='dba_role,test_role@localhost,read_role@%.test.com'

注:PERSIST会在下次数据库重启后继续生效,如果不想这么做可以使用GLOBAL。
具体示例:

mysql> show variables like 'mandatory_roles';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| mandatory_roles | |
+-----------------+-------+
1 row in set (0.00 sec)

–报错了,提示了权限不足
注:修改该参数需要ROLE_ADMIN权限

mysql> SET PERSIST mandatory_roles='dba_role,test_role@localhost,[email protected]%';
ERROR 1227 (42000): Access denied; you need (at least one of) the ROLE_ADMIN, SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation’

mysql> show variables like '%manda%';
+-----------------+------------------------------------------------------+
| Variable_name | Value |
+-----------------+------------------------------------------------------+
| mandatory_roles | 'dba_role,test_role@localhost,[email protected]%'; |
+-----------------+------------------------------------------------------+
1 row in set (0.00 sec)

–激活角色

SET DEFAULT ROLE ALL TO 'lei_test'@'localhost';

后台日志有条警告信息:提示没有对应的角色

[Warning] [MY-010968] [Server] Can't set mandatory_role: There's no such authorization ID test_role@localhost.

–创建一个用户

mysql> create user 'lei_test'@'%' identified by 'lei';
Query OK, 0 rows affected (0.19 sec)

–以localhost方式登录看看,具有了dba_role角色了

mysql> SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `dba_role`@`%` |
+----------------+
1 row in set (0.10 sec)

设置完mandatory_roles后不会立刻生效,还需要激活角色才可以,关于激活角色下面会说。
mandatory_roles指定的角色无法REVOKE或删除(DROP ROLE或DROP USER)。
如果mandatory_roles指定的角色不存在,那么该角色不会对用户生效,mysql会将该警告信息记录在日志中。如果后面该角色被创建并执行了FLUSH PRIVILEGES,那么该角色会对用户生效。

3.3.激活角色

默认情况下,将一个角色赋给一个用户或mandatory_roles,该角色是不被激活的,也就是不会生锈的。除非用户手动激活才可以。
正常没有激活的角色,显示如下:

mysql> SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| NONE |
+----------------+

激活指定用户的角色

SET DEFAULT ROLE ALL TO 'lei_test'@'localhost';

使用该用户登录数据库,查看当前角色

mysql> SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `dba_role`@`%` |
+----------------+
1 row in set (0.10 sec)

当然也可以设置当用户登录数据库时,角色就自动激活。通过设置activate_all_roles_on_login变量即可,如:

mysql > set global activate_all_roles_on_login=on;
mysql> SET ROLE NONE; SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| NONE |
+----------------+
mysql> SET ROLE ALL EXCEPT 'app_write'; SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `app_read`@`%` |
+----------------+
mysql> SET ROLE DEFAULT; SELECT CURRENT_ROLE();
+--------------------------------+
| CURRENT_ROLE() |
+--------------------------------+
| `app_read`@`%`,`app_write`@`%` |
+--------------------------------+

3.4.回收角色或角色权限

这个不用说太多了,和oracle一样,直接使用REVOKE命令即可。需要注意的是mandatory_roles中指定的角色是无法REVOKE的。

REVOKE INSERT ON *.* FROM 'role_write';

查看角色的定义:

mysql> SHOW GRANTS FOR 'role_write';
+---------------------------------------+
| Grants for app_write@% |
+---------------------------------------+
| GRANT WIRTE,DELETE ON *.* TO `role_write`@`%` |
+---------------------------------------+

3.5.删除角色

DROP ROLE  'role_write';

注:mandatory_roles中的角色无法删除。

3.6.用户和角色之间的关系

你可以发现DROP USER或DROP ROLE都可以删除一个用户或角色。

  • 角色可以赋给角色
  • 角色可以赋给用户
  • 用户可以赋给角色
  • 用户可以赋给用户


标签:mandatory,roles,角色,--,MySQL,ROLE,mysql,role
From: https://blog.51cto.com/u_12946336/5722417

相关文章

  • Oracle 18c-可伸缩序列(Scalable Sequence)
    说明在18c之前的版本中对于序列的使用,存在着对同一个序列争用的情况,特别是对于RAC这种高并发的环境中争用序列情况更是容易发生。针对这种情况,Oracle退出了可伸缩序列,大大减......
  • MySQL 8新特性--原子DDL
    ###1.AtomicDDL—原子DDL从MySQL8.0开始支持原子DDL,原子DDL语句就是将和DDL操作关联的数据字典更新,存储引擎内部操作和二进制日志写入操作组合到单个,原子事务中。即使数据......
  • Oracle 12C R2-新特性-新的初始化参数
    12.2中新引入的初始化参数ALLOW_GLOBAL_DBLINKSALLOW_GROUP_ACCESS_TO_SGAAPPROX_FOR_AGGREGATIONAPPROX_FOR_COUNT_DISTINCTAPPROX_FOR_PERCENTILEASM_IO_PROCESSESAUTOTAS......
  • OGG-误删DDL触发器ggs_ddl_trigger_before恢复
    1.说明在RAC环境中,由于两个节点都部署了OGG,而且部署同一套。而其中一个节点的OGG后期不需要了,需要卸载掉。在卸载时候忽略了一个问题,把触发器ggs_ddl_trigger_before给删......
  • Oracle 12C R2-新特性-监控PDB资源使用情况
    1 说明在12.2中可以通过一系列的动态性能视图来监控PDB的资源使用情况,包括:CPU,并行执行语句,I/O,内存。都通过一个视图V$RSRCPDBMETRIC和V$RSRCPDBMETRIC_HISTORY来查询,几乎......
  • Oracle 12C R2-新特性-多租户:支持本地UNDO模式
    在12.1中,所有的在一个实例中的PDB只能共享同一个UNDO表空间。在12.2中它们都有各自的undo表空间了。这种新的管理机制就叫做本地undo模式。与此同时,在之前的版本中现在就成......
  • PostgreSQL主从切换测试
    说明在PostgreSQL(HOT-Standby)如主库出现异常。备库如何激活;来替换主库工作。有下列2种方式备库在recovery.conf文件中有个配置项trigger_file。它是激活standby的触发文件......
  • SQL Server等待事件说明
    等待类型等待类型说明ABR仅用于提供信息而标识。不支持。无法保证将来的兼容性。AM_INDBUILD_ALLOCATION仅内部使用。适用于:SQLServer2012(11.x)及更高版本。AM_SCHEMAMGR_......
  • python冒泡排序例子
    #冒泡排序nums=[1,3,9,4,2,6,8,7,0]length=len(nums)foriinrange(length):forjinrange(length-1-i):ifnums[j]>nums[j+1]:nums[......
  • 批量巡检操作系统-小程序
    说明小工具由python编写,根据自定义的shell命令巡检所有主机,并将结果汇总到一个excel文件中,便于查看自定义shell命令主机信息巡检结果......