详解MySQL8的新特性ROLE

 更新时间:2020年11月20日 09:42:00   作者:蒋乐兴的技术随笔  
这篇文章主要介绍了详解MySQL8的新特性ROLE的相关资料,帮助大家更好的理解和使用MySQL8,感兴趣的朋友可以了解下

【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 - GPL

Copyright (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 - GPL

Copyright (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)

以上就是详解MySQL8的新特性ROLE的详细内容,更多关于MySQL8 新特性ROLE的资料请关注脚本之家其它相关文章!

相关文章

  • MySQL版oracle下scott用户建表语句实例

    MySQL版oracle下scott用户建表语句实例

    这篇文章主要给大家介绍了关于MySQL版oracle下scott用户建表语句的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • MySQL中having和where的区别及应用详解

    MySQL中having和where的区别及应用详解

    这篇文章主要给大家详细介绍了MySQL中having和where的区别以及他们的使用方法,文中有相关的代码示例,具有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • mysql外键的三种关系实例详解

    mysql外键的三种关系实例详解

    这篇文章主要介绍了mysql外键的三种关系,结合实例形式详细分析了mysql外键多对一、多对多、一对一3种关系及相关使用技巧,需要的朋友可以参考下
    2020-01-01
  • Windows下安装MySQL 5.7.17压缩版中遇到的坑

    Windows下安装MySQL 5.7.17压缩版中遇到的坑

    最近发现原来好端端的MySQL突然间不能用了,无奈只能重新下载了最新的MySQL 5.7.17 Community 压缩版 for Windows 64-bit。但在安装过程中遇到了一些意外的问题,通过查找相关资料也解决了,所以想着总结出来,方便需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • MYSQL数据库主从同步设置的实现步骤

    MYSQL数据库主从同步设置的实现步骤

    本文主要介绍了MYSQL数据库主从同步设置的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • mysql联合索引的使用规则

    mysql联合索引的使用规则

    本文主要介绍了mysql联合索引的具体使用,结合实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 防止MySQL重复插入数据的三种方法

    防止MySQL重复插入数据的三种方法

    在MySQL进行数据插入操作时,总是会考虑是否会插入重复数据,之前的操作都是先根据主键或者唯一约束条件进行查询,有就进行更新没有就进行插入。代码反复效率低下。
    2020-09-09
  • phpmyadmin报错:#2003 无法登录 MySQL服务器的解决方法

    phpmyadmin报错:#2003 无法登录 MySQL服务器的解决方法

    通过phpmyadmin连接mysql数据库时提示:“2003 无法登录 MySQL服务器”。。。很明显这是没有启动mysql服务,右击我的电脑-管理-找到服务,找到mysql启动一下
    2012-04-04
  • 浅析MySQL的WriteSet并行复制

    浅析MySQL的WriteSet并行复制

    这篇文章主要介绍了浅析MySQL的WriteSet并行复制的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-11-11
  • Mysql InnoDB引擎中的数据页结构详解

    Mysql InnoDB引擎中的数据页结构详解

    这篇文章主要为大家介绍了Mysql InnoDB引擎中的数据页结构详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论