Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

    • MySQL8一键安装配置优化
    • MySQL导出CSV格式解决乱码
    • MySQL 角色管理
      • 创建角色
      • 授权角色
      • 将角色分配给用户
      • 激活角色
      • 撤销角色权限
      • 删除角色
      • 角色管理相关命令
        • 查看用户角色
        • 角色继承
      • 最佳实践
    • MySQL网络抓包审计
    • MySQL性能压测
    • MySQL配合Consul读写分离
    • Gh-ost重建表,清除表碎片率
    • MySQL MGR配合MySQL-router实现innodb-cluster
    • MySQL 快速分析binlog定位问题
    • MySQL执行计划分析
    • DBA常用SQL和命令整理备查
    • mysqldump实时同步数据
    • MySQL的事务隔离级别
    • MySQL存储过程批量生成数据
    • MySQL insert on duplicate key update,replace into , insert ignore的理解
    • MySQL不同字符集之间的区别和选择
    • MySQL为什么有时候会选错索引
    • MySQL死锁问题
    • MySQL使用SQL语句查重去重
    • MySQLdump逻辑备份
    • MySQL主从跳过异常GITD
    • MySQL8设置slowlog记录所有语句
    • MySQL8快速克隆插件使用指南
    • MySQL8双1设置保障安全
    • MySQL锁
    • innodb cluster安装
    • MySQL里的left join 和right join以及inner join
    • optimize table和 analyze table的区别
    • MySQL 字段的区分度计算公式
    • MySQLReplicaSet 安装
    • 脚本实现MySQL ReplicaSet 高可用
    • MySQL 的Left join,Right join和Inner join 的区别
  • Redis

  • Keydb

  • TiDB

  • MongoDB

  • Elasticsearch

  • Kafka

  • victoriametrics

  • BigData

  • Sqlserver

  • 数据库
  • MySQL
Carry の Blog
2022-03-10
目录

MySQL 角色管理

# MySQL 角色管理

MySQL 8.0 引入了角色(Role)功能,这是一种权限管理的新方式,可以简化用户权限的管理。

# 创建角色

CREATE ROLE 'test_role'@'%';
1

# 授权角色

GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'test_role'@'%';
1

# 将角色分配给用户

CREATE USER 'test'@'192.168.1.1' IDENTIFIED BY '';
CREATE USER 'test1'@'192.168.1.2' IDENTIFIED BY '';
GRANT 'test_role'@'%' TO 'test'@'192.168.1.1', 'test1'@'192.168.1.2';
1
2
3

# 激活角色

SET DEFAULT ROLE 'test_role'@'%' TO 'test1'@'192.168.1.2';
SELECT CURRENT_ROLE();
1
2

这种"激活"角色的方法可以让用户拥有角色所拥有的权限,但是不难看出来,每次给新建用户绑定一个角色,在新建用户登录之前,都得将该用户激活一下,从操作上看不是特别方便,如何让所有的指定的角色都即时生效呢?

MySQL提供了一个系统参数来解决这个问题,该参数是:

mysql> SHOW VARIABLES LIKE '%activate%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| activate_all_roles_on_login | OFF   |
+-----------------------------+-------+
1 row in set (0.00 sec)

-- 该参数是默认关闭的,直接打开即可。
SET GLOBAL activate_all_roles_on_login=ON;
-- 持久化
-- sed -i '79i\\activate_all_roles_on_login = on' /data/db/mysql3306/my.cnf

-- MySQL 8.0 永久生效,并写入 mysql 的 datadir 的 mysqld-auto.cnf 文件中
SET PERSIST activate_all_roles_on_login=ON;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 撤销角色权限

REVOKE INSERT, UPDATE, DELETE ON testdb.* FROM 'test_role'@'%';
1

# 删除角色

DROP ROLE 'test_role'@'%';
1

# 角色管理相关命令

# 查看用户角色

-- 查看当前用户的角色
SELECT * FROM mysql.default_roles;

-- 查看用户的所有角色
SELECT * FROM mysql.role_edges;
1
2
3
4
5

# 角色继承

-- 创建一个基础角色
CREATE ROLE 'basic_role'@'%';
GRANT SELECT ON testdb.* TO 'basic_role'@'%';

-- 创建一个高级角色,继承基础角色
CREATE ROLE 'advanced_role'@'%';
GRANT 'basic_role'@'%' TO 'advanced_role'@'%';
GRANT INSERT, UPDATE ON testdb.* TO 'advanced_role'@'%';
1
2
3
4
5
6
7
8

# 最佳实践

  1. 合理设计角色层次:避免过于复杂的角色继承关系
  2. 最小权限原则:给角色分配最小必需的权限
  3. 定期审查:定期检查角色权限分配的合理性
  4. 使用持久化设置:通过SET PERSIST确保配置的持久性
#MySQL#角色管理
上次更新: 3/18/2026

← MySQL导出CSV格式解决乱码 MySQL网络抓包审计→

最近更新
01
MySQL抖动刷脏页
03-18
02
表空间管理与回收
03-18
03
count函数详解
03-18
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式