MySQL · 8.0.0新特性 · ROLE-阿里云开发者社区

开发者社区> zhaiwx_yinfeng> 正文

MySQL · 8.0.0新特性 · ROLE

简介: Role功能可以说是一个期待已有的功能,这从它的Worklog号(WL#988)就可以看出来,这是个相当早并且呼声很高的需求了。 所谓Role,可以认为是一个权限的集合,这个集合有一个统一的名字,就是Role名,你可以为多个账户赋予统一的某个Role的权限,而权限的修改可以直接通过修改Role来实
+关注继续查看

Role功能可以说是一个期待已有的功能,这从它的Worklog号(WL#988)就可以看出来,这是个相当早并且呼声很高的需求了。

所谓Role,可以认为是一个权限的集合,这个集合有一个统一的名字,就是Role名,你可以为多个账户赋予统一的某个Role的权限,而权限的修改可以直接通过修改Role来实现,而无需每个账户逐一GRANT权限,大大方便了运维和管理。

Role可以被创建,修改和删除,并作用到其所属于的账户上。

举个简单的例子。创建如下测试表

mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)

mysql> use testdb; create table t1 (a int, b int, primary key(a));
Database changed
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values (1,2);
Query OK, 1 row affected (0.00 sec)

创建Role,拥有t1表的查询权限:

mysql> create role priv_t1;
Query OK, 0 rows affected (0.00 sec)

mysql> grant select on testdb.t1 to 'priv_t1';
Query OK, 0 rows affected (0.00 sec)

创建一个账户,并将role的权限赋给它


mysql> create user 'rw_user1'@'%' identified by 'xxx';
Query OK, 0 rows affected (0.00 sec)

mysql> grant 'priv_t1' to 'rw_user1'@'%';
Query OK, 0 rows affected (0.00 sec)

以rw_user1登录

---- 查看权限


mysql> show grants;
+---------------------------------------+
| Grants for rw_user1@%        |
+---------------------------------------+
| GRANT USAGE ON *.* TO `rw_user1`@`%`  |
| GRANT `priv_t1`@`%` TO `rw_user1`@`%` |
+---------------------------------------+
2 rows in set (0.00 sec)

## 需要加using "role名"才会展开权限


mysql> show grants for 'rw_user1'@'%' using priv_t1;
+-------------------------------------------------+
| Grants for rw_user1@%                           |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO `rw_user1`@`%`            |
| GRANT SELECT ON `testdb`.`t1` TO `rw_user1`@`%` |
| GRANT `priv_t1`@`%` TO `rw_user1`@`%`           |
+-------------------------------------------------+
3 rows in set (0.00 sec)

然而此时并不能直接获得t1表的查询权限, 你需要手动进行选择哪些role在账户连接上来时被激活,如下:

mysql> select * from testdb.t1;
ERROR 1142 (42000): SELECT command denied to user 'rw_user1'@'localhost' for table 't1'

mysql> SET DEFAULT ROLE ALL TO 'rw_user1'@'%';
Query OK, 0 rows affected (0.00 sec)

--- 重新登录生效

mysql> select user();
+--------------------+
| user()             |
+--------------------+
| rw_user1@localhost |
+--------------------+
1 row in set (0.00 sec)

mysql> select * from testdb.t1;
+---+------+
| a | b    |
+---+------+
| 1 |    2 |
+---+------+
1 row in set (0.00 sec)

-- SET ROLE语法参阅官方文档:
-- http://dev.mysql.com/doc/refman/8.0/en/set-default-role.html

修改role的权限,会直接作用到对应的账户上:

--- 增加insert权限
--- login as root

mysql> grant insert on testdb.t1 to 'priv_t1';
Query OK, 0 rows affected (0.00 sec)

--- login as rw_user1

mysql> insert into testdb.t1 values (2,3);
Query OK, 1 row affected (0.00 sec)


--- 删除insert权限
--- login as root

mysql> revoke insert on testdb.t1 from 'priv_t1';
Query OK, 0 rows affected (0.00 sec)


--- login as rw_user1

mysql> insert into testdb.t1 values (3,4);
ERROR 1142 (42000): INSERT command denied to user 'rw_user1'@'localhost' for table 't1'

增加了两个系统表来维护Role信息,一个是mysql.default_roles表,用于展示账户使用的默认role信息,一个是role_edges,用于展示已创建的role信息

mysql> select * from default_roles;
+------+----------+-------------------+-------------------+
| HOST | USER     | DEFAULT_ROLE_HOST | DEFAULT_ROLE_USER |
+------+----------+-------------------+-------------------+
| %    | rw_user1 | %                 | priv_t1           |
+------+----------+-------------------+-------------------+
1 row in set (0.00 sec)



mysql> select * from role_edges;
+-----------+-----------+---------+----------+-------------------+
| FROM_HOST | FROM_USER | TO_HOST | TO_USER  | WITH_ADMIN_OPTION |
+-----------+-----------+---------+----------+-------------------+
| %         | priv_t1   | %       | rw_user1 | N                 |
+-----------+-----------+---------+----------+-------------------+
1 row in set (0.00 sec)

新增函数用于显示当前账户使用的role:


mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `priv_t1`@`%`  |
+----------------+
1 row in set (0.00 sec)

如何使用点击官方文档

如果你对具体怎么实现感兴趣,可以参阅commit 19ff587febb635f4518a78bdd5dffbfd9058c9aa

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL8.0 · 引擎特性 · 关于undo表空间的一些新变化
Note: 当前版本为MySQL8.0.3 InnoDB的undo log是其实现多版本的关键组件,在物理上以数据页的形式进行组织。在早期版本中(
3901 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
2899 0
MySQL8.0 · 优化器新特性 · Cost Model, 直方图及优化器开销优化
MySQL当前已经发布到MySQL8.0版本,在新的版本中,可以看到MySQL之前被人诟病的优化器部分做了很多的改动,由于笔者之前的工作环境是5.6,最近切换到最新的8.0版本,本文涵盖了一些本人感兴趣的和优化器相关的部分,主要包括MySQL5.7的cost model以及MySQL8.0的直方图功能。
2406 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10761 0
干货 | 解读MySQL 8.0新特性:CTE
CTE也就是common table expressions,是SQL标准里的语法,很多数据库都能够支持,MySQL也在8.0版本里加入了CTE功能。本文主要简单的介绍下该语法的用法,由于笔者对server层了解不深,本文不探讨代码层。
727 0
MySQL · 新特性分析 · CTE执行过程与实现原理
众所周知,Common table expression(CTE)是在大多数的关系型数据库里都存在的特性,包括ORACLE, SQLSERVER,POSTGRESQL等,唯独开源数据库老大MySQL缺失。CTE作为一个方便用户使用的功能,原本是可以利用普通的SQL语句替代的,但是对于复杂的CTE来说,要模拟出CTE的效果还是需要很大的功夫。如果考虑性能那就更是难上加难了。2013年Guilhem
3494 0
深入解读MySQL8.0 新特性 :Crash Safe DDL
深入解读MySQL8.0 新特性 :Crash Safe DDL 深入解读MySQL8.0 新特性 :Crash Safe DDL 前言 在MySQL8.0之前的版本中,由于架构的原因,mysql在server层使用统一的frm文件来存储表元数据信息,这个信息能够被不同的存储引擎识别。
2170 0
MySQL8.0 - 新特性 - 通过SQL管理UNDO TABLESPACE
前言 InnoDB的undo log从5.6版本开始可以存储到单独的tablespace文件中,在5.7版本支持了在线undo文件truncate,解决了长期以来的undo膨胀问题。而到了8.0版本,对Undo tablespace做了进一步的优化:在新版本中,我们可以拥有更多的回滚段(每个Undo tablespace可以有128个回滚段,而在之前的版本中所有tablespace的回滚段不允许超过128个),减少了由于事务公用回滚段产生的锁冲突;可以在线动态的增删undo tablespace,使得undo的管理更加灵活。
2685 0
MySQL5.6同步复制新特性详解
作者:贺春阳,出处:mysqlpub.com ! 继5.5半同步复制后,5.6又对其进行了优化与改进,其中有两个地方较为重要: 1、对运维人员来说应该是一件大喜的事情,在主从切换后,在传统的方式里,你需要找到binlog和POS点,然后hangemasterto指向,而不是很有经验的运维,往往会将其找错,造成主从同步复制报错,在mysql5.6里,你无须再知道binlog和POS点,你
1067 0
+关注
zhaiwx_yinfeng
MySQL内核开发者, 《高性能MySQL 第三版》译者之一,活跃于MySQL社区,BugList,etc...
224
文章
5
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载