MySQL的ROLE解决了什么问题

  假设你是一个职业素养良好的DBA比较同时又比较注重权限管理的话;可能遇到过这样的问题,数据库中有多个开发人员的账号;有一天要建

  一个新的schema,如果你希望之前所有的账号都能操作这个schema下的表的话,在mysql-8.0之前你要对第一个账号都单独的赋一次权。

  mysql-8.0.x所权限抽象了出来用ROLE来表示,当你为ROLE增加新的权限的时候,与这个ROLE关联的所有用户的权限也就一并变化了;针对

  上面提到的场景在mysql-8.0.x下只要一条SQL就解决了。

机智的MySQL开发

  MySQL引进ROLE用了一个非常机智的做法,既然ROLE是一堆权限的象征,这东西在MySQL里面本来就有呀!它就是USER呀。

  

  1): 创建角色

create role devgroup;

  查看mysql.user表真会被MySQL的机智给吓到

select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| devgroup         | %         |
| backup           | 127.0.0.1 |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

  说好的role事实上只是一个user呀!

  2): 给角色赋权

grant all on tempdb.* to devgroup;
Query OK, 0 rows affected (0.07 sec)

  和操作用户比起来是一样一样的!

  3):创建用户并把角色的权限赋给它

create user tom@'127.0.0.1' identified by '123456';
Query OK, 0 rows affected (0.09 sec)grant devgroup to tom@'127.0.0.1';
Query OK, 0 rows affected (0.09 sec)

  4):测试刚创建的用户是否可以登录

mysql -h127.0.0.1 -P3306 -utom -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.13 MySQL Community Server - GPLCopyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show grants;
+-------------------------------------------+
| Grants for tom@127.0.0.1                  |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `tom`@`127.0.0.1`   |
| GRANT `devgroup`@`%` TO `tom`@`127.0.0.1` |
+-------------------------------------------+
2 rows in set (0.00 sec)

角色和用户只是一个硬币的两面

  如果你还是觉得“角色”和“用户”是两个不一样的东西、那我只能是出大招了

  1): root@127.0.0.1 用户当成角色赋给刚才的tom用户

grant root@'127.0.0.1' to tom@'127.0.0.1';
Query OK, 0 rows affected (0.04 sec)

  

  2):用户tom用户检察一下自己的权限

show grants;
+--------------------------------------------------------------+
| Grants for tom@127.0.0.1                                     |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `tom`@`127.0.0.1`                      |
| GRANT `devgroup`@`%`,`root`@`127.0.0.1` TO `tom`@`127.0.0.1` |
+--------------------------------------------------------------+
2 rows in set (0.00 sec)

  可以看到root@127.0.0.1的权限已经被套上去了、既然都是root用户的权限了我们来删除一个tempdb库看一下吧!

  

  3): 删库

drop database tempdb;
ERROR 1044 (42000): Access denied for user 'tom'@'127.0.0.1' to database 'tempdb'

  看起来没有权限删除这个库呀!事实上是MySQL-8默认并不会激活role,关于是否激活role是由activate_all_roles_on_login这个参数控制的

  4): 开启activate_all_roles_on_login

set @@global.activate_all_roles_on_login=1;
Query OK, 0 rows affected (0.00 sec)

  5): 重新登录一次tom再试着删除一下tempdb库

mysql -h127.0.0.1 -P3306 -utom -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.13 MySQL Community Server - GPLCopyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use tempdb;
Database changed
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| tempdb             |
+--------------------+
5 rows in set (0.01 sec)mysql> drop database tempdb;
Query OK, 0 rows affected (0.09 sec)

----

转载于:https://www.cnblogs.com/JiangLe/p/9851958.html

MySQL8的新特性ROLE相关推荐

  1. Mysql基础篇(10)—— MySQL8.0新特性概览

    新增的新特性 更简便的NoSQL支持. 更好的索引,新增了隐藏索引和降序索引.隐藏索引可以用来去掉索引对查询性能的影响.在查询中混合存在多列索引时,使用降序索引可以提高查询的性能. 更完善的JSON支 ...

  2. MySQL基础篇13【MySQL8.0新特性】

    目录 1. MySQL8新特性概述 1.1 MySQL8.0 新增特性 1.2 MySQL8.0移除的旧特性 新特性1:窗口函数 2.1 使用窗口函数前后对比 2.2 窗口函数分类 2.3 语法结构 ...

  3. MySQL深入学习(十八):MySQL8其它新特性

    本文参考:康师傅-MySQL数据库教程天花板,mysql安装到mysql高级,强!硬! 文章目录 一. MySQL8新特性概述 1.1 MySQL8.0 新增特性 1.2 MySQL8.0移除的旧特性 ...

  4. MySQL8.0 - 新特性 - 安全及权限相关改进

    MySQL8.0里引入了不少关于权限的改动,从这些改动可以看出来,权限管理更加的规范和遍历了,这和我们之前为rds mysql增加了大量权限管理很类似,想来Oracle也是通过这些改动为其云业务服务的 ...

  5. Mysql8.0新特性之详细版本

    1. 账户与安全 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc #EDC'; ...

  6. mysql8.0 新特性

    1.  账户与安全# 用户创建与授权 之前:创建用户并授权 1 grant all privileges on *.* to 'myuser'@'%' identified by '3edc#EDC' ...

  7. MySQL8.0 - 新特性 - 临时表改进

    temptable engine 我们知道UNION, DERIVED TABLE, CTE, 子查询或者distinct order by之类的查询都可能用到临时表来存储中间结果,官方文档中列举了几 ...

  8. MySQL8.0 - 新特性 - Instant Add Column

    MySQL8.0开始对一些DDL操作做了大量的优化,例如原子DDL, 快速DDL(只修改元数据),前者解决了长期以来mysql的一大诟病,后者则提升了dba同学的生活品质 官方文档列出了一些可以快速d ...

  9. 深入解读MySQL8.0 新特性 :Crash Safe DDL

    前言 在MySQL8.0之前的版本中,由于架构的原因,mysql在server层使用统一的frm文件来存储表元数据信息,这个信息能够被不同的存储引擎识别.而实际上innodb本身也存储有元数据信息.这 ...

  10. 深入解读MySQL8.0 新特性 :Crash Safe DDL 1

    前言 在MySQL8.0之前的版本中,由于架构的原因,mysql在server层使用统一的frm文件来存储表元数据信息,这个信息能够被不同的存储引擎识别.而实际上innodb本身也存储有元数据信息.这 ...

最新文章

  1. 根据表达式的值,选择field中的值
  2. Arithmetic Sequence 三分,货仓选址,nth_element,__int128(济南)
  3. qhfl-5 redis 简单操作
  4. python多行注释符号_涨知识Python 为什么用 # 号作注释符?
  5. EntityFramework包含作用
  6. 青龙面板实现 G D O S 每日自动签到
  7. PHP Sessions
  8. centos usb转网口_Linux环境下使用 USB转串口驱动(一)
  9. python预测控制_【模型工具】耦合python和 SWMM的城市排水系统模型预测算法
  10. 启动jar包报错: 找不到或无法加载主类
  11. 再多的非标电气设计也不怕了
  12. 开课吧python基础语法-零基础玩转Python
  13. 升级Android Q之路遇到的坑-abc_screen_simple
  14. 【CCF 201903-2】 二十四点(符号栈)
  15. 【JavaWeb】之MVC三层架构
  16. 2018年推荐书单(140本)
  17. 使用Canal同步数据到ES
  18. 微信发送过来的位置怎样用高德地图收藏这个点加入收藏夹
  19. 中国电信4g最快服务器IP,中国电信DNS IP地址大全(32个省)
  20. postgresql 随笔

热门文章

  1. 一步步学习SPD2010--第十二章节--理解可用性和可接入性(5)--测试可用性
  2. Hibernate配置JNDI数据源
  3. 关于c#中的string
  4. JQuery获得绝对,相对位置的坐标方法
  5. R^2 score is not well-defined with less than two samples
  6. nginx配置php虚拟主机
  7. 使用XUtils进行文件的断点下载
  8. java 容器类 面试_校招面试之Java容器
  9. Mac配置adb笔记,彻底解决zsh: command not found: adb问题
  10. Gson源码解析之InstanceCreator简单说明