成都创新互联网站制作重庆分公司

MySQL8role角色功能介绍

role角色功能对于Oracle数据库来说不算是什么特殊, 然而对于MySQL来说 MySQL8.0新增了role角色功能意义还是令人新奇不少,同时也是很多使用MySQL服务的用户一直所期盼的

万秀ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

MySQL8.0中新增的role功能,DBA可以创建角色,对其赋予权限,并且将他们授权用户,使用角色可以大量减轻DBA的工作,可以轻松管理每个团队、用户的各种复杂的权限

下面详细介绍一下MySQL中如何使用角色:

一、创建删除角色:

创建角色使用 “CREATE ROLE”语句,假设我们为应用程序创建只读角色、读写角色和开发人员角色。

root@localhost:mysql.sock 20:37: [(none)]>create role 'db_read', 'db_rw', 'db_dev';
Query OK, 0 rows affected (0.08 sec)

角色的名称与MySQL的账户名称非常相似,由用户名+主机名称构成,如果省略主机名称则默认为'%'。

二、删除角色使用:

root@localhost:mysql.sock 20:39: [(none)]>drop role db_dev;
Query OK, 0 rows affected (0.08 sec)

三、赋予/撤销权限:

角色创建以后,需要对其赋予相应的权限。使用下列语句分别对角色赋予全部权限、只读权限和读写权限:
全部权限:

root@localhost:mysql.sock 20:43: [(none)]>create role 'db_dev';
Query OK, 0 rows affected (0.03 sec)

root@localhost:mysql.sock 20:44: [(none)]>grant all on app_db.* to 'db_dev';
Query OK, 0 rows affected (0.04 sec)

只读权限:

root@localhost:mysql.sock 20:44: [(none)]>grant select  on app_db.* to 'db_read';
Query OK, 0 rows affected (0.08 sec)

读写权限:

root@localhost:mysql.sock 20:46: [(none)]>grant select,insert,update,delete  on app_db.* to 'db_rw';
Query OK, 0 rows affected (0.07 sec)

四、赋予角色权限后,将相应的角色授予用户

例如:
创建用户:

root@localhost:mysql.sock 20:50: [(none)]>create user 'db_dev_user'@'localhost' identified by 'passjw01';
Query OK, 0 rows affected (0.09 sec)

root@localhost:mysql.sock 20:52: [(none)]>create user 'db_read_user'@'localhost' identified by 'passjw02';
Query OK, 0 rows affected (0.08 sec)

root@localhost:mysql.sock 20:52: [(none)]>create user 'db_rw_user'@'localhost' identified by 'passjw03';
Query OK, 0 rows affected (0.05 sec)

授予角色权限:

root@localhost:mysql.sock 20:53: [(none)]>grant 'db_dev' to 'db_dev_user'@'localhost';
Query OK, 0 rows affected (0.07 sec)

root@localhost:mysql.sock 20:54: [(none)]>grant 'db_read' to 'db_read_user'@'localhost';
Query OK, 0 rows affected (0.02 sec)

root@localhost:mysql.sock 20:54: [(none)]>grant 'db_rw' to 'db_rw_user'@'localhost';
Query OK, 0 rows affected (0.07 sec)

五、撤销用户的角色和撤销角色的权限:

root@localhost:mysql.sock 20:54: [(none)]>revoke 'db_dev'  from 'db_dev_user'@'localhost';
Query OK, 0 rows affected (0.03 sec)

root@localhost:mysql.sock 20:55: [(none)]>revoke  all on app_db.* from db_dev;
Query OK, 0 rows affected (0.10 sec)

root@localhost:mysql.sock 20:57: [(none)]>

六、查看角色的权限:

当角色授予用户后,我们可以查看用户拥有的权限,执行:

root@localhost:mysql.sock 20:59: [(none)]>show grants for 'db_rw_user'@'localhost';
+------------------------------------------------+
| Grants for db_rw_user@localhost                |
+------------------------------------------------+
| GRANT USAGE ON *.* TO `db_rw_user`@`localhost` |
| GRANT `db_rw`@`%` TO `db_rw_user`@`localhost`  |
+------------------------------------------------+
2 rows in set (0.00 sec)

是否注意到,执行show grants语句只是看到了用户被赋予了角色,该角色具有哪些权限该如何查看呢?执行下面的语句可以确认相关内容:

root@localhost:mysql.sock 21:01: [(none)]>show grants for 'db_rw_user'@'localhost' using 'db_rw';
+--------------------------------------------------------------------------------+
| Grants for db_rw_user@localhost                                                |
+--------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `db_rw_user`@`localhost`                                 |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `app_db`.* TO `db_rw_user`@`localhost` |
| GRANT `db_rw`@`%` TO `db_rw_user`@`localhost`                                  |
+--------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

七、强制性角色:

MySQL可以通过mandatory_roles 变量来配置强制性角色。使用强制性角色,服务器会为全部的账户默认赋予该角色,
而不需要显示执行赋予角色。可以使用my.cnf文件或者使用SET PERSIST进行配置,例如:

[mysqld]
mandatory_roles='role1,role2@localhost'
SET PERSIST mandatory_roles = 'role1,role2@localhost;

需要注意的是,配置在mandatory_roles中的角色不能撤销其权限,也不能删除。

八、角色自动激活:

赋予用户帐户的角色在帐户会话中可以处于活动状态,也可以处于非活动状态。如果赋予的角色在会话中处于活动状态,
则具有相应的权限,反之则没有。要确定当前会话中哪些角色处于活动状态,使用CURRENT_ROLE()函数。

root@localhost:mysql.sock 21:01: [(none)]>select CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| NONE           |
+----------------+
1 row in set (0.00 sec)

默认情况下,向帐户赋予角色或在mandatory_roles系统变量值中为其命名后,该角色在帐户会话中不会变为活动状态。
要指定每次用户连接到服务器,进行身份验证时激活角色,请使用 SET DEFAULT ROLE:

root@localhost:mysql.sock 21:04: [(none)]>set default role  all to  'db_dev_user'@'localhost', 'db_rw_user'@'localhost', 'db_read_user'@'localhost';
Query OK, 0 rows affected (0.06 sec)

之后,用app_dev_user登陆服务器,查看当前角色权限:

[root@localhost ~]# mysql -udb_rw_user -p'passjw03'
db_rw_user@localhost:mysql.sock 21:11: [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| app_db             |
| information_schema |
+--------------------+
db_rw_user@localhost:mysql.sock 21:11: [(none)]>select CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| `db_rw`@`%`    |
+----------------+
1 row in set (0.00 sec)

查看当前登录用户:

db_rw_user@localhost:mysql.sock 10:39: [(none)]>select current_user();
+----------------------+
| current_user()       |
+----------------------+
| db_rw_user@localhost |
+----------------------+
1 row in set (0.00 sec)

db_rw_user@localhost:mysql.sock 10:39: [(none)]>select current_user;
+----------------------+
| current_user         |
+----------------------+
| db_rw_user@localhost |
+----------------------+
1 row in set (0.00 sec)

要在用户连接到服务器时,使所有显式赋予的角色和强制角色自动激活,请启用activate_all_roles_on_login 系统变量。默认情况下,禁用自动角色激活。

关于MySQL中使用角色就介绍到这里,更为详尽的内容请访问官网手册
https://dev.mysql.com/doc/refman/8.0/en/roles.html


标题名称:MySQL8role角色功能介绍
标题URL:http://cxhlcq.com/article/jccgdg.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部