千家信息网

MySQL8 role角色功能介绍

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,role角色功能对于Oracle数据库来说不算是什么特殊, 然而对于mysql来说 MySQL8.0新增了role角色功能意义还是令人新奇不少,同时也是很多使用MySQL服务的用户一直所期盼的MySQ
千家信息网最后更新 2026年10月31日MySQL8 role角色功能介绍

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

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

角色 权限 用户 状态 服务 活动 名称 帐户 服务器 激活 语句 强制 功能 强制性 配置 主机 内容 变量 情况 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司 互联网络科技有限公司 互联网 卓越科技 互联网科技小贷 未来的互联网科技 互联网 视角下的科技创新 居家互联网科技有限公司 茂名市互联网科技产业园 科技互联网大厂 玉溪互联网科技怎么选 恒生互联网科技指数跳水 速维有品互联网信息科技(苏州)有限公司 米聚互联网科技南京有限公司排面 河南住房之家互联网科技 高科技互联网发展前景如何 特约风豹互联网科技为什么扣费 互联网第三次科技革命特征 互联网科技实习生岗位 上海乐五互联网科技有限公司 陕西九四连强互联网科技有限公司 鑫亿盛互联网科技 睿民互联网科技 广州优美互联网科技 互联网之后的科技是什么 以后互联网后是啥科技 崇明区互联网教育科技诚信经营 黑科技闪耀互联网之光 中国科技创新与世界互联网大会 上海互联网科技公司ppt 伍佰万互联网科技是干嘛的
0