本文档风哥主要介绍TiDB
RBAC权限体系配置的相关内容,包括RBAC的概念、TiDB中的RBAC实现、角色管理、权限管理、用户角色分配、实战案例和故障处理等,风哥教程参考TiDB官方文档RBAC权限相关内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 RBAC的概念
RBAC(基于角色的访问控制)是一种通过角色来管理用户权限的方法,它将用户与权限分离,通过角色作为中间层来管理权限:
- 用户(User):系统的使用者
- 角色(Role):权限的集合
- 权限(Permission):对资源的操作许可
- 资源(Resource):被保护的对象,如数据库、表、列等
- 操作(Operation):对资源的操作,如SELECT、INSERT、UPDATE等
1.2 TiDB中的RBAC实现
TiDB实现了RBAC权限模型,主要包括以下组件:
## 1. 角色管理
– **创建角色**:使用CREATE ROLE语句创建角色
– **删除角色**:使用DROP ROLE语句删除角色
– **修改角色**:使用ALTER ROLE语句修改角色
– **查看角色**:使用SHOW ROLES语句查看角色
## 2. 权限管理
– **授予权限**:使用GRANT语句将权限授予角色
– **撤销权限**:使用REVOKE语句从角色中撤销权限
– **查看权限**:使用SHOW GRANTS语句查看角色的权限
## 3. 用户角色分配风哥提示:
– **授予角色**:使用GRANT语句将角色授予用户
– **撤销角色**:使用REVOKE语句从用户中撤销角色
– **设置默认角色**:使用SET DEFAULT ROLE语句设置用户的默认角色
– **查看用户角色**:使用SHOW GRANTS语句查看用户的角色
## 4. 角色层级
– **角色继承**:支持角色之间的继承关系
– **权限继承**:子角色继承父角色的权限
– **层级管理**:通过GRANT语句实现角色继承
## 5. 权限验证
– **权限检查**:在执行操作时检查用户是否有相应的权限
– **角色激活**:用户登录时激活默认角色
– **权限缓存**:缓存权限信息以提高性能
1.3 角色的概念
角色是权限的集合,用于简化权限管理:
- 权限集合:角色可以包含多个权限
- 可重用性:多个用户可以使用同一个角色
- 易管理性:通过修改角色权限来批量修改用户权限
- 层级关系:角色之间可以有继承关系
1.4 权限模型
TiDB的权限模型基于以下层级:
## 1. 权限层级
– **全局级**:适用于所有数据库的权限
– **数据库级**:适用于特定数据库的权限
– **表级**:适用于特定表的权限
– **列级**:适用于特定列的权限
## 2. 权限类型
– **管理权限**:如CREATE USER、GRANT等
– **数据操作权限**:如SELECT、INSERT、UPDATE、DELETE等
– **结构操作权限**:如CREATE、ALTER、DROP等
– **管理操作权限**:如SHOW DATABASES、SHUTDOWN等
## 3. 权限继承
– **角色继承**:子角色继承父角色的权限
– **权限传递**:权限从父角色传递到子角色
– **权限覆盖**:子角色可以覆盖父角色的权限
## 4. 权限验证流程
– **用户登录**:用户提供凭据登录系统
– **角色激活**:激活用户的默认角色
– **权限检查**:检查用户是否有执行操作的权限
– **操作执行**:如果有权限,执行操作;否则,拒绝操作
Part02-生产环境规划与建议
2.1 RBAC规划
在生产环境中,RBAC的规划需要考虑以下因素:
## 1. 考虑因素
– **业务需求**:
– 不同业务部门的权限需求
– 不同角色的职责
– 权限的粒度
– **安全要求**:
– 最小权限原则
– 权限分离
– 权限审计
– **管理便利性**:
– 角色的可维护性
– 权限的可扩展性
– 管理的效率
## 2. 规划步骤
– **分析业务**:
分析业务流程和权限需求
识别需要的角色和权限
– **设计角色**:
设计角色层次结构
定义每个角色的权限
– **分配权限**:
将权限分配给角色
将角色分配给用户
– **实施和测试**:
实施RBAC配置
测试权限是否正确
– **维护和优化**:
定期审查和更新角色学习交流加群风哥QQ113257174
优化权限分配
## 3. 规划原则
– **最小权限原则**:只授予用户必要的权限
– **职责分离原则**:不同职责的权限应分配给不同的角色
– **层级清晰原则**:角色层级应清晰明确
– **权限集中原则**:权限管理应集中化
– **审计追踪原则**:所有权限变更应可追踪
## 4. 规划工具
– **权限矩阵**:使用矩阵来映射角色和权限
– **流程图**:使用流程图来展示角色关系
– **文档**:详细记录角色和权限的设计
2.2 角色设计
角色设计是RBAC规划的核心,需要考虑以下因素:
## 1. 角色类型
– **管理角色**:
– 超级管理员(super_admin):拥有所有权限
– 数据库管理员(db_admin):管理数据库
– 安全管理员(security_admin):管理用户和权限
– **业务角色**:
– 应用开发者(app_dev):开发应用
– 数据分析师(data_analyst):分析数据
– 业务用户(business_user):使用业务功能
– **功能角色**:
– 只读角色(readonly):只有查询权限
– 读写角色(readwrite):有查询和修改权限
– 审计角色(audit):有审计权限
## 2. 角色层级
– **顶层角色**:如超级管理员
– **中层角色**:如数据库管理员、安全管理员
– **底层角色**:如应用开发者、数据分析师
– **功能角色**:如只读角色、读写角色
## 3. 角色命名规范
– **管理角色**:admin_xxx
– **业务角色**:biz_xxx
– **功能角色**:func_xxx
– **临时角色**:temp_xxx
## 4. 角色设计示例
– **超级管理员**:
– 权限:所有权限
– 适用:系统管理员
– **数据库管理员**:
– 权限:管理数据库、表、索引等
– 适用:DBA
– **应用开发者**:
– 权限:开发所需的权限
– 适用:开发人员
– **数据分析师**:
– 权限:查询数据的权限
– 适用:分析师
– **业务用户**:
– 权限:业务操作所需的权限
– 适用:业务人员
2.3 权限分配策略
权限分配策略是RBAC实施的关键,需要考虑以下因素:
## 1. 分配原则
– **最小权限原则**:只授予用户必要的权限
– **基于职责原则**:根据用户的职责分配权限
– **权限分离原则**:不同职责的权限应分离
– **定期审查原则**:定期审查权限分配
## 2. 分配方法
– **基于角色的分配**:
通过角色分配权限,简化权限管理
适合大多数用户
– **直接分配**:
直接给用户分配权限,灵活性高
适合特殊用户
– **组合分配**:
结合角色和直接分配
适合复杂场景
## 3. 权限管理
– **权限审查**:
定期审查权限分配
确保权限符合最小权限原则
– **权限变更**:
记录权限变更
跟踪权限变更历史
– **权限回收**:
及时回收不再需要的权限
确保权限的时效性
## 4. 权限监控
– **权限使用监控**:
监控权限的使用情况
发现异常权限使用
– **权限变更监控**:
监控权限变更
发现未授权的权限变更
– **权限合规性检查**:
检查权限分配是否符合合规要求
发现合规性问题
Part03-生产环境项目实施方案
3.1 角色管理
3.1.1 创建角色
## 1. 创建管理角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘admin_super’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘admin_db’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘admin_security’;”
## 2. 创建业务角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘biz_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘biz_analyst’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘biz_user’;”
## 3. 创建功能角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘func_readonly’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘func_readwrite’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘func_audit’;”
## 4. 验证角色创建
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;”
# 输出示例
+—————+—————-+——–+
| Role_name | Create_time | Engine |
+—————+—————-+——–+
| admin_super | 2024-01-01 10:00:00 | N/A |
| admin_db | 2024-01-01 10:00:00 | N/A |
| admin_security | 2024-01-01 10:00:00 | N/A |
| biz_dev | 2024-01-01 10:00:00 | N/A |
| biz_analyst | 2024-01-01 10:00:00 | N/A |
| biz_user | 2024-01-01 10:00:00 | N/A |
| func_readonly | 2024-01-01 10:00:00 | N/A |
| func_readwrite | 2024-01-01 10:00:00 | N/A |
| func_audit | 2024-01-01 10:00:00 | N/A |
+—————+—————-+——–+
3.1.2 删除角色
## 1. 删除临时角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “DROP ROLE ‘temp_role’;”
## 2. 验证角色删除
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;”
# 输出示例
+—————+—————-+——–+
| Role_name | Create_time | Engine |
+—————+—————-+——–+
| admin_super | 2024-01-01 10:00:00 | N/A |
| admin_db | 2024-01-01 10:00:00 | N/A |
| admin_security | 2024-01-01 10:00:00 | N/A |
| biz_dev | 2024-01-01 10:00:00 | N/A |
| biz_analyst | 2024-01-01 10:00:00 | N/A |
| biz_user | 2024-01-01 10:00:00 | N/A |
| func_readonly | 2024-01-01 10:00:00 | N/A |
| func_readwrite | 2024-01-01 10:00:00 | N/A |
| func_audit | 2024-01-01 10:00:00 | N/A |
+—————+—————-+——–+
3.2 权限管理
3.2.1 授予角色权限
## 1. 授予超级管理员角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ALL PRIVILEGES ON *.* TO ‘admin_super’ WITH GRANT OPTION;”
## 2. 授予数据库管理员角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON *.* TO
‘admin_db’;”
## 3. 授予安全管理员角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE USER, DROP USER, ALTER USER, GRANT, REVOKE ON *.* TO
‘admin_security’;”
## 4. 授予应用开发者角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON fgedudb.*
TO ‘biz_dev’;”
## 5. 授予数据分析师角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘biz_analyst’;”
## 6. 授予业务用户角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE ON fgedudb.fgedu_users TO ‘biz_user’;”
## 7. 授予只读角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON *.* TO ‘func_readonly’;”
## 8. 授予读写角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO ‘func_readwrite’;”
## 9. 验证角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘biz_dev’;”
# 输出示例
+————————————————————————————————————–+
| Grants for biz_dev@% |
+————————————————————————————————————–+
| GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON `fgedudb`.* TO `biz_dev`@`%` |
+————————————————————————————————————–+
3.2.2 撤销角色权限
## 1. 撤销应用开发者角色的DROP权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE DROP ON fgedudb.* FROM ‘biz_dev’;”
## 2. 验证角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘biz_dev’;”
# 输出示例
+————————————————————————————————————–+
| Grants for biz_dev@% |
+————————————————————————————————————–+
| GRANT CREATE, ALTER, SELECT, INSERT, UPDATE, DELETE ON `fgedudb`.* TO `biz_dev`@`%` |
+————————————————————————————————————–+
3.3 用户角色分配
3.3.1 授予用户角色
## 1. 创建用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_admin’@’%’ IDENTIFIED BY ‘Admin@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_dev’@’%’ IDENTIFIED BY ‘Dev@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_analyst’@’%’ IDENTIFIED BY ‘Analyst@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_biz’@’%’ IDENTIFIED BY ‘Biz@123’;”
## 2. 授予用户角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘admin_super’ TO ‘user_admin’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_dev’ TO ‘user_dev’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_analyst’ TO ‘user_analyst’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_user’ TO ‘user_biz’@’%’;”
## 3. 设置默认角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘admin_super’ FOR ‘user_admin’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_dev’ FOR ‘user_dev’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_analyst’ FOR ‘user_analyst’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_user’ FOR ‘user_biz’@’%’;”
## 4. 验证用户角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘user_dev’@’%’;”
# 输出示例
+————————————————————————————————————–+
| Grants for user_dev@% |
+————————————————————————————————————–+
| GRANT `biz_dev` TO `user_dev`@`%` |
+————————————————————————————————————–+
## 5. 验证默认角色
$ mysql -h 192.168.1.10 -P 4000 -u user_dev -p”Dev@123″ -e “SELECT CURRENT_ROLE();”
# 输出示例
+—————-+—————-+
| CURRENT_ROLE() |
+—————-+—————-+
| `biz_dev`@`%` |
+—————-+—————-+
3.3.2 撤销用户角色
## 1. 撤销用户的角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE ‘biz_dev’ FROM ‘user_dev’@’%’;”
## 2. 验证用户角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘user_dev’@’%’;”
# 输出示例
+————————————————————————————————————–+
| Grants for user_dev@% |
+————————————————————————————————————–+
| GRANT USAGE ON *.* TO `user_dev`@`%` |
+————————————————————————————————————–+
Part04-生产案例与实战讲解
4.1 RBAC配置实战
4.1.1 RBAC配置实战案例
## 1. 环境信息
– **TiDB版本**:6.1.0
– **操作系统**:Oracle Linux 9.3
– **数据库**:fgedudb
## 2. 需求分析
– **超级管理员**:拥有所有权限
– **数据库管理员**:管理数据库和表
– **应用开发者**:开发和测试应用
– **数据分析师**:查询和分析数据
– **业务用户**:使用业务功能
## 3. 实施步骤
### 3.1 创建角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘admin_super’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘admin_db’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘biz_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘biz_analyst’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘biz_user’;”
### 3.2 授予角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ALL PRIVILEGES ON *.* TO ‘admin_super’ WITH GRANT OPTION;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON *.* TO
‘admin_db’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON fgedudb.*
TO ‘biz_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘biz_analyst’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE ON fgedudb.fgedu_users TO ‘biz_user’;”
### 3.3 创建用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_admin’@’%’ IDENTIFIED BY ‘Admin@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_dev’@’%’ IDENTIFIED BY ‘Dev@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_analyst’@’%’ IDENTIFIED BY ‘Analyst@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_biz’@’%’ IDENTIFIED BY ‘Biz@123’;”
### 3.4 授予用户角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘admin_super’ TO ‘user_admin’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘admin_db’ TO ‘user_dev’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_analyst’ TO ‘user_analyst’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_user’ TO ‘user_biz’@’%’;”
### 3.5 设置默认角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘admin_super’ FOR ‘user_admin’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘admin_db’ FOR ‘user_dev’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_analyst’ FOR ‘user_analyst’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_user’ FOR ‘user_biz’@’%’;”
### 3.6 验证RBAC配置
$ mysql -h 192.168.1.10 -P 4000 -u user_dev -p”Dev@123″ -e “CREATE TABLE fgedudb.test_table (id INT PRIMARY KEY,
name VARCHAR(100));”
# 输出示例
Query OK, 0 rows affected (0.01 sec)
$ mysql -h 192.168.1.10 -P 4000 -u user_analyst -p”Analyst@123″ -e “INSERT INTO fgedudb.test_table (id, name)
VALUES (1, ‘test’);”
# 输出示例
ERROR 1142 (42000): INSERT command denied to user ‘user_analyst’@’%’ for table ‘test_table’
$ mysql -h 192.168.1.10 -P 4000 -u user_biz -p”Biz@123″ -e “SELECT * FROM fgedudb.fgedu_users;”
# 输出示例
+—-+——+————————+
| id | name | email |
+—-+——+————————+
| 1 | 张三 | zhangsan@fgedu.net.cn |
| 2 | 李四 | lisi@fgedu.net.cn |
| 3 | 王五 | wangwu@fgedu.net.cn |
+—-+——+————————+
### 3.7 权限审查
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘biz_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘user_dev’@’%’;”
## 4. 实施结果
– **角色创建**:成功创建了5个角色
– **权限分配**:成功分配了相应的权限
– **用户创建**:成功创建了4个用户
– **角色分配**:成功将角色分配给用户
– **权限验证**:权限控制符合预期
## 5. 常见问题处理
– **问题**:角色创建失败
**原因**:用户没有CREATE ROLE权限
**解决**:使用超级用户创建角色
– **问题**:权限授予失败
**原因**:用户没有GRANT权限
**解决**:使用超级用户授予权限
– **问题**:角色权限不生效
**原因**:没有设置默认角色
**解决**:使用SET DEFAULT ROLE命令设置默认角色
4.2 角色层级实战
4.2.1 角色层级实战案例
## 1. 环境信息
– **TiDB版本**:6.1.0
– **操作系统**:Oracle Linux 9.3
– **数据库**:fgedudb
## 2. 需求分析
– **创建角色层级**:超级管理员 → 数据库管理员 → 应用开发者 → 业务用户
– **权限继承**:子角色继承父角色的权限
– **权限管理**:通过修改父角色权限来批量修改子角色权限
## 3. 实施步骤
### 3.1 创建角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_super’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_db’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_user’;”
### 3.2 授予角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ALL PRIVILEGES ON *.* TO ‘role_super’ WITH GRANT OPTION;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_super’ TO ‘role_db’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_db’ TO ‘role_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_dev’ TO ‘role_user’;”
### 3.3 授予额外权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE, ALTER, DROP ON fgedudb.* TO ‘role_db’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘role_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT ON fgedudb.fgedu_users TO ‘role_user’;”
### 3.4 创建用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_super’@’%’ IDENTIFIED BY ‘Super@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_db’@’%’ IDENTIFIED BY ‘Db@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_dev’@’%’ IDENTIFIED BY ‘Dev@123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_biz’@’%’ IDENTIFIED BY ‘Biz@123’;”
### 3.5 授予用户角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_super’ TO ‘user_super’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_db’ TO ‘user_db’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_dev’ TO ‘user_dev’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_user’ TO ‘user_biz’@’%’;”
### 3.6 设置默认角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_super’ FOR ‘user_super’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_db’ FOR ‘user_db’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_dev’ FOR ‘user_dev’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_user’ FOR ‘user_biz’@’%’;”
### 3.7 验证角色层级
$ mysql -h 192.168.1.10 -P 4000 -u user_biz -p”Biz@123″ -e “SELECT * FROM fgedudb.fgedu_users;”
# 输出示例
+—-+——+————————+
| id | name | email |
+—-+——+————————+
| 1 | 张三 | zhangsan@fgedu.net.cn |
| 2 | 李四 | lisi@fgedu.net.cn |
| 3 | 王五 | wangwu@fgedu.net.cn |
+—-+——+————————+
$ mysql -h 192.168.1.10 -P 4000 -u user_biz -p”Biz@123″ -e “CREATE TABLE fgedudb.test_table (id INT PRIMARY KEY,
name VARCHAR(100));”
# 输出示例
ERROR 1142 (42000): CREATE command denied to user ‘user_biz’@’%’ for table ‘test_table’
$ mysql -h 192.168.1.10 -P 4000 -u user_dev -p”Dev@123″ -e “CREATE TABLE fgedudb.test_table (id INT PRIMARY KEY,
name VARCHAR(100));”
# 输出示例
Query OK, 0 rows affected (0.01 sec)
### 3.8 测试权限继承
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT DROP ON fgedudb.* TO ‘role_dev’;”
$ mysql -h 192.168.1.10 -P 4000 -u user_dev -p”Dev@123″ -e “DROP TABLE fgedudb.test_table;”
# 输出示例
Query OK, 0 rows affected (0.01 sec)
## 4. 实施结果
– **角色层级**:成功创建了4级角色层级
– **权限继承**:子角色成功继承父角色的权限
– **权限管理**:通过修改父角色权限,子角色权限也会相应变更
– **权限验证**:权限控制符合预期
## 5. 常见问题处理
– **问题**:角色继承不生效
**原因**:角色继承关系设置错误
**解决**:检查角色继承关系,确保正确设置
– **问题**:子角色权限超出父角色
**原因**:直接给子角色授予了超出父角色的权限
**解决**:确保子角色的权限不超出父角色
– **问题**:角色层级过深
**原因**:角色层级设计不合理
**解决**:优化角色层级设计,避免层级过深
4.3 故障处理
RBAC权限体系配置过程中的故障处理:
## 1. 角色相关故障
### 1.1 角色创建失败
– **问题描述**:创建角色时报错”ERROR 1064 (42000)”
– **原因分析**:SQL语法错误、用户没有CREATE ROLE权限
– **解决方案**:
– 检查SQL语法:
确保CREATE ROLE语句语法正确
– 检查用户权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR CURRENT_USER();”
– 使用超级用户创建角色:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_name’;”
### 1.2 角色删除失败
– **问题描述**:删除角色时报错”ERROR 1396 (HY000)”
– **原因分析**:角色不存在、角色被用户使用
– **解决方案**:
– 检查角色是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;”
– 检查角色是否被用户使用:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT * FROM mysql.role_edges;”
– 先撤销用户的角色,再删除角色:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE ‘role_name’ FROM ‘user_name’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “DROP ROLE ‘role_name’;”
### 1.3 角色权限不生效
– **问题描述**:用户拥有角色,但角色权限不生效
– **原因分析**:没有设置默认角色、角色权限未授予
– **解决方案**:
– 设置默认角色:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_name’ FOR ‘user_name’@’%’;”
– 检查角色权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_name’;”
– 授予角色权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘role_name’;”
## 2. 权限相关故障
### 2.1 权限授予失败
– **问题描述**:授予权限时报错”ERROR 1045 (42000)”
– **原因分析**:用户没有GRANT权限、权限级别错误
– **解决方案**:
– 检查用户权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR CURRENT_USER();”
– 使用超级用户授予权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘role_name’;”
– 检查权限级别:
确保权限级别正确(如数据库级、表级、列级)
### 2.2 权限撤销失败
– **问题描述**:撤销权限时报错”ERROR 1141 (42000)”
– **原因分析**:权限不存在、用户没有REVOKE权限
– **解决方案**:
– 检查权限是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_name’;”
– 检查用户权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR CURRENT_USER();”
– 使用超级用户撤销权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE SELECT ON fgedudb.* FROM ‘role_name’;”
### 2.3 权限冲突
– **问题描述**:用户权限与角色权限冲突
– **原因分析**:用户直接授予的权限与角色授予的权限冲突
– **解决方案**:
– 检查用户权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘user_name’@’%’;”
– 检查角色权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_name’;”
– 调整权限:
撤销冲突的权限,统一使用角色权限
## 3. 用户角色分配故障
### 3.1 角色授予失败
– **问题描述**:授予用户角色时报错”ERROR 1396 (HY000)”
– **原因分析**:角色不存在、用户不存在
– **解决方案**:
– 检查角色是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;”
– 检查用户是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user;”
– 创建角色或用户后再授予:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_name’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_name’ TO ‘user_name’@’%’;”
### 3.2 默认角色设置失败
– **问题描述**:设置默认角色时报错”ERROR 1396 (HY000)”
– **原因分析**:角色不存在、用户不存在、用户没有该角色
– **解决方案**:
– 检查角色是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;”
– 检查用户是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user;”
– 检查用户是否有该角色:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘user_name’@’%’;”
– 先授予角色,再设置默认角色:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_name’ TO ‘user_name’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_name’ FOR ‘user_name’@’%’;”
### 3.3 角色继承故障
– **问题描述**:角色继承不生效
– **原因分析**:角色继承关系设置错误、权限传递失败
– **解决方案**:
– 检查角色继承关系:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT * FROM mysql.role_edges;”
– 重新设置角色继承:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘parent_role’ TO ‘child_role’;”
– 检查权限传递:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘child_role’;”
## 4. 其他故障
### 4.1 权限审计失败
– **问题描述**:无法审计权限变更
– **原因分析**:审计日志未启用、权限变更未记录
– **解决方案**:
– 启用审计日志:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL audit_log = ON;”
– 检查审计日志配置:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW VARIABLES LIKE ‘audit%’;”
– 查看审计日志:
$ tail -f /tidb/log/audit.log
### 4.2 权限性能问题
– **问题描述**:权限检查导致性能下降
– **原因分析**:权限检查过于频繁、权限缓存未启用
– **解决方案**:
– 启用权限缓存:
检查TiDB配置文件中的权限缓存设置
– 优化角色设计:
减少角色层级,简化权限结构
– 批量授权:
使用角色批量授权,减少权限检查次数
### 4.3 权限合规性问题
– **问题描述**:权限分配不符合合规要求
– **原因分析**:权限分配过于宽松、未定期审查
– **解决方案**:
– 实施最小权限原则:
只授予用户必要的权限
– 定期审查权限:
每季度审查一次权限分配
– 自动化权限管理:
使用脚本自动检查权限合规性
Part05-风哥经验总结与分享
5.1 最佳实践
RBAC权限体系配置的最佳实践:
- 角色层级清晰:设计清晰的角色层级,避免层级过深
- 职责分离:不同职责的权限应分配给不同的角色
- 最小权限原则:每个角色只包含必要的权限
- 命名规范:使用统一的命名规范,便于管理
- 文档记录:详细记录角色的设计和权限分配
- 基于角色的授权:优先使用角色进行权限管理
- 权限集中管理:集中管理权限,避免分散授权
- 定期审查:定期审查权限分配,确保符合最小权限原则
- 权限变更记录:记录所有权限变更,便于追溯
- 权限回收:及时回收不再需要的权限
- 角色分配:通过角色分配权限,避免直接给用户授权
- 默认角色:为用户设置默认角色,确保权限正确激活
- 用户生命周期管理:管理用户的创建、修改和删除
- 密码策略:实施强密码策略,定期更新密码
- 账号锁定:对异常账号进行锁定
5.2 常见问题与解决方案
RBAC权限体系配置的常见问题与解决方案:
## 1. 角色相关问题
### 1.1 角色创建失败
– **问题**:创建角色时报错
– **解决**:
– 检查SQL语法
– 确保用户有CREATE ROLE权限
– 使用超级用户创建角色
### 1.2 角色权限不生效
– **问题**:用户拥有角色,但权限不生效
– **解决**:
– 设置默认角色
– 检查角色权限是否正确授予
– 验证用户是否正确拥有角色
### 1.3 角色继承失败
– **问题**:角色继承关系不生效
– **解决**:
– 检查角色继承关系
– 重新设置角色继承
– 验证权限传递
## 2. 权限相关问题
### 2.1 权限授予失败
– **问题**:授予权限时报错
– **解决**:
– 检查用户是否有GRANT权限
– 确保权限级别正确
– 使用超级用户授予权限
### 2.2 权限撤销失败
– **问题**:撤销权限时报错
– **解决**:
– 检查权限是否存在
– 确保用户有REVOKE权限
– 使用超级用户撤销权限
### 2.3 权限冲突
– **问题**:用户权限与角色权限冲突
– **解决**:
– 检查用户权限
– 检查角色权限
– 调整权限,统一使用角色权限
## 3. 用户角色分配问题
### 3.1 角色授予失败
– **问题**:授予用户角色时报错
– **解决**:
– 检查角色是否存在
– 检查用户是否存在
– 先创建角色或用户,再授予
### 3.2 默认角色设置失败
– **问题**:设置默认角色时报错
– **解决**:
– 检查角色是否存在
– 检查用户是否存在
– 先授予角色,再设置默认角色
### 3.3 用户权限不足
– **问题**:用户权限不足,无法执行操作
– **解决**:
– 检查用户角色
– 检查角色权限
– 授予必要的权限
## 4. 性能和安全问题
### 4.1 权限检查性能问题
– **问题**:权限检查导致性能下降
– **解决**:
– 启用权限缓存
– 优化角色设计
– 批量授权
### 4.2 权限安全问题
– **问题**:权限分配过于宽松,存在安全风险
– **解决**:
– 实施最小权限原则
– 定期审查权限
– 自动化权限管理
### 4.3 权限审计问题
– **问题**:无法审计权限变更
– **解决**:
– 启用审计日志
– 配置审计日志参数
– 定期分析审计日志
5.3 RBAC配置技巧
RBAC权限体系配置的实用技巧:
## 1. 角色管理技巧
### 1.1 批量创建角色
– **创建多个角色**:
#!/bin/bash
# create_roles.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
roles=(“admin_super” “admin_db” “admin_security” “biz_dev” “biz_analyst” “biz_user” “func_readonly”
“func_readwrite”)
for role in “${roles[@]}”; do
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘$role’;”
done
### 1.2 批量删除角色
– **删除多个角色**:
#!/bin/bash
# delete_roles.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
roles=(“temp_role1” “temp_role2” “temp_role3”)
for role in “${roles[@]}”; do
mysql -h 192.168.1.10 -P 4000 -u root -e “DROP ROLE ‘$role’;”
done
### 1.3 角色权限审查
– **审查角色权限**:
#!/bin/bash
# check_role_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
roles=(“admin_super” “admin_db” “biz_dev” “biz_analyst” “biz_user”)
for role in “${roles[@]}”; do
echo “Permissions for role $role:”
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘$role’;”
echo “”
done
## 2. 权限管理技巧
### 2.1 批量授予权限
– **批量授予权限**:
#!/bin/bash
# grant_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 授予超级管理员角色权限
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ALL PRIVILEGES ON *.* TO ‘admin_super’ WITH GRANT OPTION;”
# 授予数据库管理员角色权限
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON *.* TO
‘admin_db’;”
# 授予安全管理员角色权限
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE USER, DROP USER, ALTER USER, GRANT, REVOKE ON *.* TO
‘admin_security’;”
# 授予应用开发者角色权限
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE ON fgedudb.*
TO ‘biz_dev’;”
# 授予数据分析师角色权限
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘biz_analyst’;”
# 授予业务用户角色权限
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE ON fgedudb.fgedu_users TO ‘biz_user’;”
### 2.2 批量撤销权限
– **批量撤销权限**:
#!/bin/bash
# revoke_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 撤销应用开发者角色的DROP权限
mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE DROP ON fgedudb.* FROM ‘biz_dev’;”
# 撤销数据分析师角色的SELECT权限
mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE SELECT ON fgedudb.sensitive_data FROM ‘biz_analyst’;”
### 2.3 权限审计
– **权限审计**:
#!/bin/bash
# audit_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
echo “=== Role Permissions Audit ===”
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;”
echo “”
echo “=== User Roles Audit ===”
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT FROM_USER, TO_USER, WITH_ADMIN_OPTION FROM mysql.role_edges;”
echo “”
echo “=== Super User Audit ===”
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user WHERE Super_priv = ‘Y’;”
## 3. 用户角色分配技巧
### 3.1 批量创建用户并分配角色
– **批量创建用户**:
#!/bin/bash
# create_users.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 创建管理员用户
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_admin’@’%’ IDENTIFIED BY ‘Admin@123’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘admin_super’ TO ‘user_admin’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘admin_super’ FOR ‘user_admin’@’%’;”
# 创建开发用户
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_dev’@’%’ IDENTIFIED BY ‘Dev@123’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_dev’ TO ‘user_dev’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_dev’ FOR ‘user_dev’@’%’;”
# 创建分析师用户
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_analyst’@’%’ IDENTIFIED BY ‘Analyst@123’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_analyst’ TO ‘user_analyst’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_analyst’ FOR ‘user_analyst’@’%’;”
# 创建业务用户
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘user_biz’@’%’ IDENTIFIED BY ‘Biz@123’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘biz_user’ TO ‘user_biz’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘biz_user’ FOR ‘user_biz’@’%’;”
### 3.2 批量撤销用户角色
– **批量撤销用户角色**:
#!/bin/bash
# revoke_user_roles.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 撤销用户的角色
mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE ‘biz_dev’ FROM ‘user_dev’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE ‘biz_analyst’ FROM ‘user_analyst’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE ‘biz_user’ FROM ‘user_biz’@’%’;”
### 3.3 用户权限审查
– **用户权限审查**:
#!/bin/bash
# check_user_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
users=(“user_admin” “user_dev” “user_analyst” “user_biz”)
for user in “${users[@]}”; do
echo “Permissions for user $user:”
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘$user’@’%’;”
echo “”
done
## 4. 其他技巧
### 4.1 角色层级管理
– **角色层级管理**:
#!/bin/bash
# manage_role_hierarchy.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 创建角色
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_super’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_db’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_dev’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_user’;”
# 设置角色继承
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_super’ TO ‘role_db’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_db’ TO ‘role_dev’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_dev’ TO ‘role_user’;”
# 查看角色继承关系
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT * FROM mysql.role_edges;”
### 4.2 权限备份与恢复
– **权限备份**:
#!/bin/bash
# backup_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 备份角色
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW ROLES;” > /tidb/backup/roles_backup.txt
# 备份角色权限
roles=(“admin_super” “admin_db” “biz_dev” “biz_analyst” “biz_user”)
for role in “${roles[@]}”; do
echo “Permissions for role $role:” >> /tidb/backup/role_permissions_backup.txt
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘$role’;” >> /tidb/backup/role_permissions_backup.txt
echo “” >> /tidb/backup/role_permissions_backup.txt
done
# 备份用户角色
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT * FROM mysql.role_edges;” > /tidb/backup/user_roles_backup.txt
### 4.3 权限自动化管理
– **权限自动化管理**:
#!/bin/bash
# auto_permission_management.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 定期审查权限
echo “=== Permission Audit Report ===” > /tidb/reports/permission_audit_$(date +%Y%m%d).txt
echo “Date: $(date)” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
echo “” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
# 检查超级用户
echo “=== Super Users ===” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user WHERE Super_priv = ‘Y’;” >>
/tidb/reports/permission_audit_$(date +%Y%m%d).txt
echo “” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
# 检查角色权限
echo “=== Role Permissions ===” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
roles=(“admin_super” “admin_db” “biz_dev” “biz_analyst” “biz_user”)
for role in “${roles[@]}”; do
echo “Role: $role” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘$role’;” >> /tidb/reports/permission_audit_$(date
+%Y%m%d).txt
echo “” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
done
# 检查用户角色
echo “=== User Roles ===” >> /tidb/reports/permission_audit_$(date +%Y%m%d).txt
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT FROM_USER, TO_USER, WITH_ADMIN_OPTION FROM mysql.role_edges;” >>
/tidb/reports/permission_audit_$(date +%Y%m%d).txt
echo “Permission audit completed. Report saved to /tidb/reports/permission_audit_$(date +%Y%m%d).txt”
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
