1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG071-TiDB用户权限与安全管理

本文档风哥主要介绍TiDB用户权限与安全管理的相关内容,包括用户的概念、权限的概念、安全管理的概念、用户管理、权限管理、安全管理实施、实战案例和故障处理等,风哥教程参考TiDB官方文档用户权限与安全管理相关内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 用户的概念

用户是指可以访问TiDB数据库的实体,每个用户都有一个唯一的用户名和密码:

用户的定义:

  • 用户名:用户的唯一标识
  • 密码:用户的认证凭证
  • 权限:用户可以执行的操作
  • 角色:用户所属的角色,用于权限管理

1.2 权限的概念

权限是指用户可以执行的操作,包括对数据库、表、列等对象的操作权限:

权限的定义:

  • 操作权限:如SELECT、INSERT、UPDATE、DELETE等
  • 对象权限:如数据库、表、列等对象的权限
  • 管理权限:如CREATE USER、GRANT等管理操作的权限
  • 角色权限:通过角色授予的权限

1.3 安全管理的概念

安全管理是指保护TiDB数据库免受未授权访问、数据泄露和恶意攻击的措施:

安全管理的定义:风哥提示:

  • 认证:验证用户身份的过程
  • 授权:授予用户权限的过程
  • 审计:记录用户操作的过程
  • 加密:保护数据传输和存储的安全
  • 访问控制:限制用户访问的过程

1.4 TiDB支持的权限

TiDB支持多种权限,包括:

# TiDB支持的权限

## 1. 数据库级权限
– **ALL PRIVILEGES**:所有权限
– **CREATE**:创建数据库和表的权限
– **DROP**:删除数据库和表的权限
– **ALTER**:修改数据库和表的权限
– **SELECT**:查询数据的权限
– **INSERT**:插入数据的权限
– **UPDATE**:更新数据的权限
– **DELETE**:删除数据的权限
– **GRANT OPTION**:授予权限的权限

## 2. 表级权限
– **SELECT**:查询表数据的权限
– **INSERT**:插入表数据的权限
– **UPDATE**:更新表数据的权限
– **DELETE**:删除表数据的权限
– **CREATE**:创建表的权限
– **DROP**:删除表的权限
– **ALTER**:修改表结构的权限
– **INDEX**:创建和删除索引的权限
– **TRIGGER**:创建和删除触发器的权限
– **REFERENCES**:创建外键的权限

## 3. 列级权限
– **SELECT**:查询列数据的权限
– **INSERT**:插入列数据的权限
– **UPDATE**:更新列数据的权限

## 4. 管理权限
– **CREATE USER**:创建用户的权限
– **DROP USER**:删除用户的权限
– **ALTER USER**:修改用户的权限
– **GRANT**:授予权限的权限
– **REVOKE**:撤销权限的权限
– **CREATE ROLE**:创建角色的权限
– **DROP ROLE**:删除角色的权限
– **ALTER ROLE**:修改角色的权限
– **SET DEFAULT ROLE**:设置默认角色的权限

## 5. 其他权限
– **SUPER**:超级用户权限
– **PROCESS**:查看进程的权限
– **REPLICATION CLIENT**:复制客户端权限
– **REPLICATION SLAVE**:复制从库权限
– **SHOW DATABASES**:查看数据库的权限
– **SHUTDOWN**:关闭服务器的权限
– **FILE**:读写文件的权限

风哥提示:用户权限与安全管理是TiDB数据库的重要组成部分,直接影响数据库的安全性和可靠性。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 用户规划

在生产环境中,用户的规划需要考虑以下因素:

# 用户规划

## 1. 考虑因素
– **业务需求**:
– 不同业务部门的用户需求
– 不同角色的用户权限需求
– 临时用户和永久用户的管理
– **安全要求**:
– 最小权限原则
– 定期密码更新
– 用户活动审计
– **管理便利性**:
– 角色管理
– 权限继承
– 批量管理

## 2. 用户类型
– **超级用户**:
– 拥有所有权限
– 用于数据库管理
– 严格控制访问
– **管理员用户**:
– 拥有管理权限
– 用于日常管理
– 权限范围有限
– **应用用户**:学习交流加群风哥QQ113257174
– 拥有特定应用所需的权限
– 用于应用程序连接
– 权限最小化
– **只读用户**:
– 只有查询权限
– 用于报表和分析
– 权限严格限制
– **临时用户**:
– 临时授予权限
– 有时间限制
– 定期清理

## 3. 用户命名规范
– **超级用户**:root
– **管理员用户**:admin_xxx
– **应用用户**:app_xxx
– **只读用户**:readonly_xxx
– **临时用户**:temp_xxx

## 4. 用户管理策略
– **密码策略**:
– 密码复杂度要求
– 密码过期时间
– 密码历史记录
– **用户生命周期**:
– 用户创建流程
– 用户权限变更流程
– 用户删除流程
– **审计策略**:
– 用户登录审计
– 用户操作审计
– 异常行为检测

2.2 权限规划

在生产环境中,权限的规划需要考虑以下因素:

# 权限规划

## 1. 考虑因素
– **业务需求**:
– 不同业务操作的权限需求
– 数据访问的权限控制
– 管理操作的权限控制
– **安全要求**:
– 最小权限原则
– 权限分离
– 权限审计
– **管理便利性**:
– 角色管理
– 权限继承
– 批量授权

## 2. 权限级别
– **服务器级**:
– 适用于所有数据库
– 如CREATE USER、SHUTDOWN等
– **数据库级**:
– 适用于特定数据库
– 如CREATE、DROP等
– **表级**:
– 适用于特定表
– 如SELECT、INSERT等
– **列级**:
– 适用于特定列
– 如SELECT、UPDATE等

## 3. 角色管理
– **管理员角色**:
– 拥有管理权限
– 如CREATE USER、GRANT等
– **应用角色**:
– 拥有应用所需的权限
– 如SELECT、INSERT、UPDATE等
– **只读角色**:
– 只有查询权限
– 如SELECT等
– **开发角色**:
– 拥有开发所需的权限
– 如CREATE、ALTER等

## 4. 权限管理策略
– **授权策略**:
– 基于角色的授权
– 最小权限原则
– 定期权限审查
– **撤销策略**:
– 权限变更时撤销旧权限
– 用户离职时撤销权限
– 定期清理过期权限
– **审计策略**:
– 权限变更审计
– 权限使用审计
– 异常权限检测

2.3 安全规划

在生产环境中,安全的规划需要考虑以下因素:

# 安全规划

## 1. 考虑因素
– **认证安全**:
– 密码复杂度
– 认证方式
– 登录限制
– **授权安全**:
– 权限控制
– 角色管理
– 权限审计
– **数据安全**:
– 数据加密
– 数据脱敏
– 数据备份
– **网络安全**:
– 网络访问控制
– SSL/TLS加密
– 防火墙设置
– **审计安全**:
– 操作审计
– 登录审计
– 异常检测

## 2. 安全措施
– **认证措施**:
– 强密码策略
– 双因素认证
– 登录失败限制
– **授权措施**:
– 最小权限原则
– 基于角色的访问控制
– 定期权限审查
– **数据措施**:
– 传输加密(SSL/TLS)
– 存储加密
– 数据脱敏
– **网络措施**:
– 网络隔离
– 防火墙规则
– VPN访问
– **审计措施**:
– 操作日志记录
– 审计日志分析
– 异常行为告警

## 3. 安全策略
– **密码策略**:
– 密码长度至少8位
– 包含大小写字母、数字和特殊字符
– 密码每90天更新一次
– 密码历史记录至少5次
– **登录策略**:
– 登录失败3次后锁定账号
– 锁定时间为30分钟
– 定期清理 inactive 用户
– **权限策略**:
– 基于角色的权限管理
– 最小权限原则
– 定期权限审查(每季度)
– **审计策略**:
– 记录所有用户操作
– 审计日志保存至少6个月
– 定期分析审计日志

## 4. 安全监控
– **监控内容**:
– 登录尝试(成功/失败)
– 权限变更
– 数据访问
– 异常操作
– **监控工具**:
– Prometheus + Grafana
– 安全信息和事件管理(SIEM)系统
– 日志分析工具
– **告警机制**:
– 登录失败告警
– 权限变更告警
– 异常操作告警
– 安全事件告警

Part03-生产环境项目实施方案

3.1 用户管理

3.1.1 创建用户

# 创建用户

## 1. 创建超级用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘admin’@’%’ IDENTIFIED BY ‘Admin@123’;”

## 2. 创建管理员用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘admin_fgedu’@’%’ IDENTIFIED BY ‘Admin@fgedu123’;”

## 3. 创建应用用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘App@fgedu123’;”

## 4. 创建只读用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘readonly_fgedu’@’%’ IDENTIFIED BY ‘Readonly@fgedu123’;”

## 5. 创建临时用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘temp_fgedu’@’%’ IDENTIFIED BY ‘Temp@fgedu123’ PASSWORD
EXPIRE IN 7 DAYS;”

## 6. 验证用户创建
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user;”

# 输出示例
+—————+——+
| user | host |
+—————+——+
| root | % |
| admin | % |
| admin_fgedu | % |
| app_fgedu | % |
| readonly_fgedu | % |
| temp_fgedu | % |
+—————+——+

3.1.2 修改用户

# 修改用户

## 1. 修改用户密码
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘NewApp@fgedu123’;”

## 2. 修改用户密码过期时间
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ PASSWORD EXPIRE IN 90 DAYS;”

## 3. 解锁用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ ACCOUNT UNLOCK;”

## 4. 锁定用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘temp_fgedu’@’%’ ACCOUNT LOCK;”

## 5. 验证用户修改
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host, account_locked FROM mysql.user;”

# 输出示例
+—————+——+—————-+
| user | host | account_locked |
+—————+——+
| root | % | N |
| admin | % | N |
| admin_fgedu | % | N |
| app_fgedu | % | N |
| readonly_fgedu | % | N |
| temp_fgedu | % | Y |
+—————+——+

3.1.3 删除用户

# 删除用户

## 1. 删除临时用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “DROP USER ‘temp_fgedu’@’%’;”

## 2. 验证用户删除
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user;”

# 输出示例
+—————+——+
| user | host |
+—————+——+
| root | % |
| admin | % |
| admin_fgedu | % |
| app_fgedu | % |
| readonly_fgedu | % |
+—————+——+

3.2 权限管理

3.2.1 授予权限

# 授予权限

## 1. 授予管理员用户权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ALL PRIVILEGES ON *.* TO ‘admin_fgedu’@’%’ WITH GRANT OPTION;”

## 2. 授予应用用户权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘app_fgedu’@’%’;”

## 3. 授予只读用户权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘readonly_fgedu’@’%’;”

## 4. 授予列级权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT (id, name), UPDATE (name) ON fgedudb.fgedu_users TO
‘app_fgedu’@’%’;”

## 5. 验证权限授予
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”

# 输出示例
+————————————————————————————————————–+
| Grants for app_fgedu@% |
+————————————————————————————————————–+
| GRANT SELECT, INSERT, UPDATE, DELETE ON `fgedudb`.* TO `app_fgedu`@`%` |
| GRANT SELECT (id, name), UPDATE (name) ON `fgedudb`.`fgedu_users` TO `app_fgedu`@`%` |
+————————————————————————————————————–+

3.2.2 撤销权限

# 撤销权限

## 1. 撤销应用用户的DELETE权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE DELETE ON fgedudb.* FROM ‘app_fgedu’@’%’;”

## 2. 撤销应用用户的列级UPDATE权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE UPDATE (name) ON fgedudb.fgedu_users FROM ‘app_fgedu’@’%’;”

## 3. 验证权限撤销
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”

# 输出示例
+————————————————————————————————————–+
| Grants for app_fgedu@% |
+————————————————————————————————————–+
| GRANT SELECT, INSERT, UPDATE ON `fgedudb`.* TO `app_fgedu`@`%` |
| GRANT SELECT (id, name) ON `fgedudb`.`fgedu_users` TO `app_fgedu`@`%` |
+————————————————————————————————————–+

3.2.3 角色管理

# 角色管理

## 1. 创建角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_app’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_readonly’;”

## 2. 授予角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE ON fgedudb.* TO ‘role_app’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘role_readonly’;”

## 3. 授予用户角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_app’ TO ‘app_fgedu’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_readonly’ TO ‘readonly_fgedu’@’%’;”

## 4. 设置默认角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_app’ FOR ‘app_fgedu’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_readonly’ FOR ‘readonly_fgedu’@’%’;”

## 5. 验证角色管理
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”

# 输出示例
+————————————————————————————————————–+
| Grants for app_fgedu@% |
+————————————————————————————————————–+
| GRANT SELECT, INSERT, UPDATE ON `fgedudb`.* TO `app_fgedu`@`%` |
| GRANT SELECT (id, name) ON `fgedudb`.`fgedu_users` TO `app_fgedu`@`%` |
| GRANT `role_app` TO `app_fgedu`@`%` |
+————————————————————————————————————–+

$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_app’;”

# 输出示例
+————————————————————————————————–+
| Grants for role_app@% |
+————————————————————————————————–+
| GRANT SELECT, INSERT, UPDATE ON `fgedudb`.* TO `role_app`@`%` |
+————————————————————————————————–+

3.3 安全管理实施

3.3.1 密码策略配置

# 密码策略配置

## 1. 修改密码验证插件
$ mysql -h 192.168.1.10 -P 4000 -u root -e “INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;”

## 2. 查看密码验证插件状态
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.PLUGINS
WHERE PLUGIN_NAME = ‘validate_password’;”

# 输出示例
+——————-+—————+
| PLUGIN_NAME | PLUGIN_STATUS |
+——————-+—————+
| validate_password | ACTIVE |
+——————-+—————+

## 3. 配置密码策略
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_length = 8;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_number_count = 1;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_special_char_count = 1;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_mixed_case_count = 1;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_policy = ‘MEDIUM’;”

## 4. 验证密码策略
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW VARIABLES LIKE ‘validate_password%’;”

# 输出示例
+————————————–+——-+
| Variable_name | Value |
+————————————–+——-+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM|
| validate_password_special_char_count | 1 |
+————————————–+——-+

## 5. 测试密码策略
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘test_user’@’%’ IDENTIFIED BY ‘password’;”

# 输出示例
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘test_user’@’%’ IDENTIFIED BY ‘Password123!’;”

# 输出示例
Query OK, 0 rows affected (0.01 sec)

3.3.2 SSL/TLS配置

# SSL/TLS配置

## 1. 生成SSL证书
$ mkdir -p /tidb/ssl
$ cd /tidb/ssl
$ openssl genrsa -out ca-key.pem 2048
$ openssl req -new -key ca-key.pem -out ca-csr.pem -subj “/CN=TiDB CA”
$ openssl x509 -req -in ca-csr.pem -signkey ca-key.pem -out ca.pem
$ openssl genrsa -out server-key.pem 2048
$ openssl req -new -key server-key.pem -out server-csr.pem -subj “/CN=192.168.1.10”
$ openssl x509 -req -in server-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
$ openssl genrsa -out client-key.pem 2048
$ openssl req -new -key client-key.pem -out client-csr.pem -subj “/CN=client”
$ openssl x509 -req -in client-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem

## 2. 修改TiDB配置文件
$ vim /tidb/app/tidb/conf/tidb.toml

# 添加以下配置
[security]
ssl_cert = “/tidb/ssl/server-cert.pem”
ssl_key = “/tidb/ssl/server-key.pem”
ssl_ca = “/tidb/ssl/ca.pem”
require_secure_transport = true

## 3. 重启TiDB服务
$ systemctl restart tidb

## 4. 验证SSL配置
$ mysql -h 192.168.1.10 -P 4000 -u root –ssl-ca=/tidb/ssl/ca.pem –ssl-cert=/tidb/ssl/client-cert.pem
–ssl-key=/tidb/ssl/client-key.pem -e “SHOW VARIABLES LIKE ‘ssl%’;”

# 输出示例
+—————+—————–+
| Variable_name | Value |
+—————+—————–+
| ssl_ca | /tidb/ssl/ca.pem |
| ssl_cert | /tidb/ssl/client-cert.pem |
| ssl_key | /tidb/ssl/client-key.pem |
+—————+—————–+

## 5. 测试SSL连接
$ mysql -h 192.168.1.10 -P 4000 -u root –ssl-ca=/tidb/ssl/ca.pem –ssl-cert=/tidb/ssl/client-cert.pem
–ssl-key=/tidb/ssl/client-key.pem -e “SELECT CONNECTION_ID(), SSL_CIPHER();”

# 输出示例
+—————–+————————+
| CONNECTION_ID() | SSL_CIPHER() |
+—————–+————————+
| 1 | TLS_AES_256_GCM_SHA384 |
+—————–+————————+

3.3.3 审计日志配置

# 审计日志配置

## 1. 修改TiDB配置文件
$ vim /tidb/app/tidb/conf/tidb.toml

# 添加以下配置
[security]
audit_log = true
audit_log_file = “/tidb/log/audit.log”
audit_log_level = “info”
audit_log_rotate = true
audit_log_max_size = 100

## 2. 重启TiDB服务
$ systemctl restart tidb

## 3. 验证审计日志配置
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW VARIABLES LIKE ‘audit%’;”

# 输出示例
+—————+—————–+
| Variable_name | Value |
+—————+—————–+
| audit_log | ON |
| audit_log_file | /tidb/log/audit.log |
+—————+—————–+

## 4. 测试审计日志
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE DATABASE test_audit;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “DROP DATABASE test_audit;”

## 5. 查看审计日志
$ tail -f /tidb/log/audit.log

# 输出示例
2024-01-01T10:00:00.000+08:00 [INFO] [audit.go:100] [“audit log”] [user=root] [host=192.168.1.1] [command=CREATE
DATABASE] [status=OK] [sql=CREATE DATABASE test_audit]
2024-01-01T10:00:01.000+08:00 [INFO] [audit.go:100] [“audit log”] [user=root] [host=192.168.1.1] [command=DROP
DATABASE] [status=OK] [sql=DROP DATABASE test_audit]

风哥提示:安全管理是TiDB数据库的重要组成部分,需要从用户管理、权限管理、密码策略、SSL/TLS配置和审计日志等多个方面进行综合考虑。from tidb视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 用户管理实战

4.1.1 用户管理实战案例

# 用户管理实战案例

## 1. 环境信息
– **TiDB版本**:6.1.0
– **操作系统**:Oracle Linux 9.3
– **数据库**:fgedudb

## 2. 需求分析
– **超级用户**:root,用于数据库管理
– **管理员用户**:admin_fgedu,用于日常管理
– **应用用户**:app_fgedu,用于应用程序连接
– **只读用户**:readonly_fgedu,用于报表查询
– **临时用户**:temp_fgedu,用于临时操作

## 3. 实施步骤

### 3.1 创建用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘admin_fgedu’@’%’ IDENTIFIED BY ‘Admin@fgedu123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘App@fgedu123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘readonly_fgedu’@’%’ IDENTIFIED BY ‘Readonly@fgedu123’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘temp_fgedu’@’%’ IDENTIFIED BY ‘Temp@fgedu123’ PASSWORD
EXPIRE IN 7 DAYS;”

### 3.2 授予权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ALL PRIVILEGES ON *.* TO ‘admin_fgedu’@’%’ WITH GRANT OPTION;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘app_fgedu’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘readonly_fgedu’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE ON fgedudb.fgedu_users TO
‘temp_fgedu’@’%’;”

### 3.3 验证用户创建
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user;”

# 输出示例
+—————+——+
| user | host |
+—————+——+
| root | % |
| admin_fgedu | % |
| app_fgedu | % |
| readonly_fgedu | % |
| temp_fgedu | % |
+—————+——+

### 3.4 验证权限授予
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”

# 输出示例
+————————————————————————————————————–+
| Grants for app_fgedu@% |
+————————————————————————————————————–+
| GRANT SELECT, INSERT, UPDATE, DELETE ON `fgedudb`.* TO `app_fgedu`@`%` |
+————————————————————————————————————–+

### 3.5 测试用户登录
$ mysql -h 192.168.1.10 -P 4000 -u app_fgedu -p”App@fgedu123″ -e “SELECT USER(), CURRENT_USER();”

# 输出示例
+———————+———————+
| USER() | CURRENT_USER() |
+———————+———————+
| app_fgedu@192.168.1.1 | app_fgedu@% |
+———————+———————+

### 3.6 测试权限
$ mysql -h 192.168.1.10 -P 4000 -u app_fgedu -p”App@fgedu123″ -e “USE fgedudb; SELECT * FROM fgedu_users LIMIT 1;”

# 输出示例
+—-+——+————————+
| id | name | email |
+—-+——+————————+
| 1 | 张三 | zhangsan@fgedu.net.cn |
+—-+——+————————+

$ mysql -h 192.168.1.10 -P 4000 -u app_fgedu -p”App@fgedu123″ -e “CREATE DATABASE test_db;”

# 输出示例
ERROR 1044 (42000): Access denied for user ‘app_fgedu’@’%’ to database ‘test_db’

### 3.7 管理临时用户
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘temp_fgedu’@’%’ ACCOUNT LOCK;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “DROP USER ‘temp_fgedu’@’%’;”

## 4. 实施结果
– **用户创建**:成功创建了5个用户
– **权限授予**:成功授予了相应的权限
– **权限验证**:用户权限符合预期
– **安全管理**:临时用户得到有效管理

## 5. 常见问题处理
– **问题**:用户创建失败
**原因**:密码不符合策略要求
**解决**:使用符合密码策略的密码

– **问题**:权限授予失败
**原因**:用户不存在
**解决**:先创建用户,再授予权限

– **问题**:用户登录失败
**原因**:密码错误或账号被锁定
**解决**:检查密码和账号状态

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_app’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_readonly’;”

### 3.2 授予角色权限
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘role_app’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘role_readonly’;”

### 3.3 授予用户角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_app’ TO ‘app_fgedu’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_readonly’ TO ‘readonly_fgedu’@’%’;”

### 3.4 设置默认角色
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_app’ FOR ‘app_fgedu’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_readonly’ FOR ‘readonly_fgedu’@’%’;”

### 3.5 验证角色管理
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”

# 输出示例
+————————————————————————————————————–+
| Grants for app_fgedu@% |
+————————————————————————————————————–+
| GRANT SELECT, INSERT, UPDATE, DELETE ON `fgedudb`.* TO `app_fgedu`@`%` |
| GRANT `role_app` TO `app_fgedu`@`%` |
+————————————————————————————————————–+

$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_app’;”

# 输出示例
+————————————————————————————————–+
| Grants for role_app@% |
+————————————————————————————————–+
| GRANT SELECT, INSERT, UPDATE, DELETE ON `fgedudb`.* TO `role_app`@`%` |
+————————————————————————————————–+

### 3.6 测试角色权限
$ mysql -h 192.168.1.10 -P 4000 -u app_fgedu -p”App@fgedu123″ -e “USE fgedudb; INSERT INTO fgedu_users (id, name,
email) VALUES (4, ‘赵六’, ‘zhaoliu@fgedu.net.cn’);”

# 输出示例
Query OK, 1 row affected (0.01 sec)

$ mysql -h 192.168.1.10 -P 4000 -u readonly_fgedu -p”Readonly@fgedu123″ -e “USE fgedudb; INSERT INTO fgedu_users
(id, name, email) VALUES (5, ‘孙七’, ‘sunqi@fgedu.net.cn’);”

# 输出示例
ERROR 1142 (42000): INSERT command denied to user ‘readonly_fgedu’@’%’ for table ‘fgedu_users’

### 3.7 权限审查
$ 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 “SELECT * FROM mysql.role_edges;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘readonly_fgedu’@’%’;”

## 4. 实施结果
– **角色创建**:成功创建了2个角色
– **权限分配**:成功分配了相应的权限
– **权限验证**:角色权限符合预期
– **权限审查**:权限状态清晰可查

## 5. 常见问题处理
– **问题**:角色创建失败
**原因**:用户没有CREATE ROLE权限
**解决**:使用超级用户创建角色

– **问题**:角色权限不生效
**原因**:没有设置默认角色
**解决**:使用SET DEFAULT ROLE命令设置默认角色

– **问题**:权限审查困难
**原因**:权限分配分散
**解决**:使用角色管理,集中权限分配

4.3 安全管理实战

4.3.1 安全管理实战案例

# 安全管理实战案例

## 1. 环境信息
– **TiDB版本**:6.1.0
– **操作系统**:Oracle Linux 9.3
– **数据库**:fgedudb

## 2. 需求分析
– **密码策略**:实施强密码策略
– **SSL/TLS**:启用SSL/TLS加密
– **审计日志**:启用审计日志
– **访问控制**:限制网络访问

## 3. 实施步骤

### 3.1 实施密码策略
$ mysql -h 192.168.1.10 -P 4000 -u root -e “INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_length = 8;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_number_count = 1;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_special_char_count = 1;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_mixed_case_count = 1;”
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_policy = ‘MEDIUM’;”

### 3.2 配置SSL/TLS
$ mkdir -p /tidb/ssl
$ cd /tidb/ssl
$ openssl genrsa -out ca-key.pem 2048
$ openssl req -new -key ca-key.pem -out ca-csr.pem -subj “/CN=TiDB CA”
$ openssl x509 -req -in ca-csr.pem -signkey ca-key.pem -out ca.pem
$ openssl genrsa -out server-key.pem 2048
$ openssl req -new -key server-key.pem -out server-csr.pem -subj “/CN=192.168.1.10”
$ openssl x509 -req -in server-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
$ openssl genrsa -out client-key.pem 2048
$ openssl req -new -key client-key.pem -out client-csr.pem -subj “/CN=client”
$ openssl x509 -req -in client-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem

$ vim /tidb/app/tidb/conf/tidb.toml
[security]
ssl_cert = “/tidb/ssl/server-cert.pem”
ssl_key = “/tidb/ssl/server-key.pem”
ssl_ca = “/tidb/ssl/ca.pem”
require_secure_transport = true

$ systemctl restart tidb

### 3.3 配置审计日志
$ vim /tidb/app/tidb/conf/tidb.toml
[security]
audit_log = true
audit_log_file = “/tidb/log/audit.log”
audit_log_level = “info”
audit_log_rotate = true
audit_log_max_size = 100

$ systemctl restart tidb

### 3.4 配置网络访问控制
$ firewall-cmd –zone=public –add-port=4000/tcp –permanent
$ firewall-cmd –zone=public –add-port=2379/tcp –permanent
$ firewall-cmd –zone=public –add-port=20160/tcp –permanent
$ firewall-cmd –reload

### 3.5 验证安全配置
$ mysql -h 192.168.1.10 -P 4000 -u root –ssl-ca=/tidb/ssl/ca.pem –ssl-cert=/tidb/ssl/client-cert.pem
–ssl-key=/tidb/ssl/client-key.pem -e “SHOW VARIABLES LIKE ‘validate_password%’;”

# 输出示例
+————————————–+——-+
| Variable_name | Value |
+————————————–+——-+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM|
| validate_password_special_char_count | 1 |
+————————————–+

$ mysql -h 192.168.1.10 -P 4000 -u root –ssl-ca=/tidb/ssl/ca.pem –ssl-cert=/tidb/ssl/client-cert.pem
–ssl-key=/tidb/ssl/client-key.pem -e “SHOW VARIABLES LIKE ‘ssl%’;”

# 输出示例
+—————+—————–+
| Variable_name | Value |
+—————+—————–+
| ssl_ca | /tidb/ssl/ca.pem |
| ssl_cert | /tidb/ssl/client-cert.pem |
| ssl_key | /tidb/ssl/client-key.pem |
+—————+—————–+

$ mysql -h 192.168.1.10 -P 4000 -u root –ssl-ca=/tidb/ssl/ca.pem –ssl-cert=/tidb/ssl/client-cert.pem
–ssl-key=/tidb/ssl/client-key.pem -e “SHOW VARIABLES LIKE ‘audit%’;”

# 输出示例
+—————+—————–+
| Variable_name | Value |
+—————+—————–+
| audit_log | ON |
| audit_log_file | /tidb/log/audit.log |
+—————+—————–+

### 3.6 测试安全配置
$ mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘test_user’@’%’ IDENTIFIED BY ‘password’;”

# 输出示例
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

$ mysql -h 192.168.1.10 -P 4000 -u root –ssl-ca=/tidb/ssl/ca.pem –ssl-cert=/tidb/ssl/client-cert.pem
–ssl-key=/tidb/ssl/client-key.pem -e “CREATE DATABASE test_security;”

$ tail -f /tidb/log/audit.log

# 输出示例
2024-01-01T10:00:00.000+08:00 [INFO] [audit.go:100] [“audit log”] [user=root] [host=192.168.1.1] [command=CREATE
DATABASE] [status=OK] [sql=CREATE DATABASE test_security]

## 4. 实施结果
– **密码策略**:成功实施了强密码策略
– **SSL/TLS**:成功启用了SSL/TLS加密
– **审计日志**:成功启用了审计日志
– **网络访问控制**:成功配置了防火墙规则

## 5. 常见问题处理
– **问题**:SSL连接失败
**原因**:证书配置错误
**解决**:检查证书路径和权限

– **问题**:审计日志不生成
**原因**:配置文件路径错误
**解决**:检查配置文件中的审计日志路径

– **问题**:密码策略不生效
**原因**:插件未安装
**解决**:安装validate_password插件

4.4 故障处理

用户权限与安全管理过程中的故障处理:

# 故障处理

## 1. 用户相关故障

### 1.1 用户登录失败
– **问题描述**:用户无法登录,报错”Access denied for user”
– **原因分析**:密码错误、账号被锁定、权限不足
– **解决方案**:
– 检查密码是否正确
– 检查账号是否被锁定:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host, account_locked FROM mysql.user WHERE user =
‘app_fgedu’;”
– 解锁账号:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ ACCOUNT UNLOCK;”
– 重置密码:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘NewApp@fgedu123’;”

### 1.2 用户权限不足
– **问题描述**:用户执行操作时报错”Access denied”
– **原因分析**:用户没有相应的权限
– **解决方案**:
– 检查用户权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”
– 授予相应的权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘app_fgedu’@’%’;”

### 1.3 用户密码过期
– **问题描述**:用户登录时报错”Your password has expired”
– **原因分析**:密码过期时间已到
– **解决方案**:
– 重置密码:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘NewApp@fgedu123’;”
– 修改密码过期时间:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ PASSWORD EXPIRE IN 90 DAYS;”

## 2. 权限相关故障

### 2.1 权限授予失败
– **问题描述**:授予权限时报错”ERROR 1064 (42000)”
– **原因分析**:SQL语法错误、用户不存在、权限级别错误
– **解决方案**:
– 检查SQL语法:
确保GRANT语句语法正确
– 检查用户是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user WHERE user = ‘app_fgedu’;”
– 检查权限级别:
确保权限级别正确(如数据库级、表级、列级)

### 2.2 权限撤销失败
– **问题描述**:撤销权限时报错”ERROR 1141 (42000)”
– **原因分析**:权限不存在、用户不存在
– **解决方案**:
– 检查权限是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”
– 检查用户是否存在:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user, host FROM mysql.user WHERE user = ‘app_fgedu’;”

### 2.3 角色权限不生效
– **问题描述**:用户拥有角色,但角色权限不生效
– **原因分析**:没有设置默认角色、角色权限未授予
– **解决方案**:
– 设置默认角色:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_app’ FOR ‘app_fgedu’@’%’;”
– 检查角色权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_app’;”
– 授予角色权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘role_app’;”

## 3. 安全相关故障

### 3.1 SSL连接失败
– **问题描述**:SSL连接时报错”SSL connection error”
– **原因分析**:证书配置错误、证书过期、网络问题
– **解决方案**:
– 检查证书路径:
确保配置文件中的证书路径正确
– 检查证书权限:
$ ls -la /tidb/ssl/
– 检查证书有效期:
$ openssl x509 -in /tidb/ssl/server-cert.pem -text -noout
– 检查网络连接:
$ telnet 192.168.1.10 4000

### 3.2 审计日志不生成
– **问题描述**:审计日志文件不存在或无内容
– **原因分析**:配置文件路径错误、权限不足、配置未启用
– **解决方案**:
– 检查配置文件:
$ grep -A 5 “audit_log” /tidb/app/tidb/conf/tidb.toml
– 检查审计日志目录权限:
$ ls -la /tidb/log/
– 检查审计日志配置:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW VARIABLES LIKE ‘audit%’;”
– 重启TiDB服务:
$ systemctl restart tidb

### 3.3 密码策略不生效
– **问题描述**:弱密码仍然可以设置
– **原因分析**:validate_password插件未安装、配置参数错误
– **解决方案**:
– 安装validate_password插件:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;”
– 检查插件状态:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.PLUGINS
WHERE PLUGIN_NAME = ‘validate_password’;”
– 配置密码策略:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_policy = ‘MEDIUM’;”

## 4. 其他故障

### 4.1 权限冲突
– **问题描述**:用户权限与角色权限冲突
– **原因分析**:用户直接授予的权限与角色授予的权限冲突
– **解决方案**:
– 检查用户权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”
– 检查角色权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_app’;”
– 调整权限:
撤销冲突的权限,统一使用角色权限

### 4.2 权限泄露
– **问题描述**:用户拥有不应有的权限
– **原因分析**:权限授予错误、权限继承错误
– **解决方案**:
– 审查权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘app_fgedu’@’%’;”
– 撤销多余权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE UNUSED PRIVILEGES ON fgedudb.* FROM ‘app_fgedu’@’%’;”
– 重新授予正确权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘app_fgedu’@’%’;”

### 4.3 安全事件
– **问题描述**:发现可疑登录或操作
– **原因分析**:密码泄露、账号被盗用
– **解决方案**:
– 查看审计日志:
$ tail -f /tidb/log/audit.log
– 锁定可疑账号:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘suspicious_user’@’%’ ACCOUNT LOCK;”
– 重置密码:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘NewPassword@123’;”
– 加强安全措施:
启用双因素认证、限制登录IP

Part05-风哥经验总结与分享

5.1 最佳实践

用户权限与安全管理的最佳实践:

用户管理最佳实践:

  • 最小权限原则:只授予用户必要的权限
  • 角色管理:使用角色管理权限,简化权限分配
  • 定期审查:定期审查用户和权限,清理不必要的用户和权限
  • 密码策略:实施强密码策略,定期更新密码
  • 账号管理:及时锁定或删除不再使用的账号
权限管理最佳实践:

  • 基于角色的访问控制:使用角色管理权限,简化权限管理
  • 权限分离:将管理权限与业务权限分离
  • 定期权限审查:每季度审查一次权限,确保权限分配合理
  • 权限撤销:用户权限变更时,及时撤销旧权限
  • 权限审计:记录权限变更,便于追溯
安全管理最佳实践:

  • SSL/TLS加密:启用SSL/TLS加密,保护数据传输安全
  • 审计日志:启用审计日志,记录用户操作
  • 网络访问控制:使用防火墙限制网络访问
  • 定期安全检查:定期进行安全检查,发现并修复安全漏洞
  • 安全培训:对数据库管理员和开发人员进行安全培训

5.2 常见问题与解决方案

用户权限与安全管理的常见问题与解决方案:

# 常见问题与解决方案

## 1. 用户管理问题

### 1.1 忘记密码
– **问题**:忘记用户密码
– **解决**:
– 使用root用户重置密码:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘NewPassword@123’;”

### 1.2 账号被锁定
– **问题**:用户账号被锁定
– **解决**:
– 解锁账号:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ ACCOUNT UNLOCK;”

### 1.3 密码过期
– **问题**:用户密码过期
– **解决**:
– 重置密码:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘NewPassword@123’;”
– 修改密码过期时间:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ PASSWORD EXPIRE IN 90 DAYS;”

## 2. 权限管理问题

### 2.1 权限不足
– **问题**:用户权限不足,无法执行操作
– **解决**:
– 授予相应的权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘app_fgedu’@’%’;”

### 2.2 权限过度
– **问题**:用户拥有过多权限,存在安全风险
– **解决**:
– 撤销多余权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE ALL PRIVILEGES ON *.* FROM ‘app_fgedu’@’%’;”
– 重新授予必要的权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘app_fgedu’@’%’;”

### 2.3 角色权限不生效
– **问题**:用户拥有角色,但角色权限不生效
– **解决**:
– 设置默认角色:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_app’ FOR ‘app_fgedu’@’%’;”
– 检查角色权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘role_app’;”

## 3. 安全管理问题

### 3.1 SSL连接失败
– **问题**:SSL连接失败
– **解决**:
– 检查证书配置:
$ grep -A 5 “ssl” /tidb/app/tidb/conf/tidb.toml
– 检查证书权限:
$ ls -la /tidb/ssl/
– 重启TiDB服务:
$ systemctl restart tidb

### 3.2 审计日志不生成
– **问题**:审计日志不生成
– **解决**:
– 检查审计日志配置:
$ grep -A 5 “audit_log” /tidb/app/tidb/conf/tidb.toml
– 检查审计日志目录权限:
$ ls -la /tidb/log/
– 重启TiDB服务:
$ systemctl restart tidb

### 3.3 密码策略不生效
– **问题**:弱密码仍然可以设置
– **解决**:
– 安装validate_password插件:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “INSTALL PLUGIN validate_password SONAME ‘validate_password.so’;”
– 配置密码策略:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET GLOBAL validate_password_policy = ‘MEDIUM’;”

## 4. 安全事件处理

### 4.1 可疑登录
– **问题**:发现可疑登录
– **解决**:
– 查看审计日志:
$ tail -f /tidb/log/audit.log
– 锁定可疑账号:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘suspicious_user’@’%’ ACCOUNT LOCK;”
– 重置密码:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘app_fgedu’@’%’ IDENTIFIED BY ‘NewPassword@123’;”

### 4.2 权限滥用
– **问题**:发现用户权限滥用
– **解决**:
– 撤销用户权限:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “REVOKE ALL PRIVILEGES ON *.* FROM ‘abusive_user’@’%’;”
– 锁定用户账号:
$ mysql -h 192.168.1.10 -P 4000 -u root -e “ALTER USER ‘abusive_user’@’%’ ACCOUNT LOCK;”
– 调查原因:
查看审计日志,分析权限滥用的原因

5.3 安全管理技巧

用户权限与安全管理的实用技巧:

# 安全管理技巧

## 1. 用户管理技巧

### 1.1 批量创建用户
– **创建多个用户**:
#!/bin/bash
# create_users.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

users=(“app_user1” “app_user2” “app_user3″)
password=”App@fgedu123”

for user in “${users[@]}”; do
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE USER ‘$user’@’%’ IDENTIFIED BY ‘$password’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘$user’@’%’;”
done

### 1.2 批量删除用户
– **删除多个用户**:
#!/bin/bash
# delete_users.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

users=(“temp_user1” “temp_user2” “temp_user3”)

for user in “${users[@]}”; do
mysql -h 192.168.1.10 -P 4000 -u root -e “DROP USER ‘$user’@’%’;”
done

### 1.3 定期清理用户
– **清理过期用户**:
#!/bin/bash
# clean_users.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

expired_users=$(mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user FROM mysql.user WHERE password_expired =
‘Y’;” -sN)

for user in $expired_users; do
mysql -h 192.168.1.10 -P 4000 -u root -e “DROP USER ‘$user’@’%’;”
done

## 2. 权限管理技巧

### 2.1 批量授予权限
– **授予多个用户相同权限**:
#!/bin/bash
# grant_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

users=(“app_user1” “app_user2” “app_user3”)

for user in “${users[@]}”; do
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘$user’@’%’;”
done

### 2.2 权限审查脚本
– **审查用户权限**:
#!/bin/bash
# check_permissions.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

users=$(mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT user FROM mysql.user WHERE user != ‘root’;” -sN)

for user in $users; do
echo “Permissions for $user:”
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW GRANTS FOR ‘$user’@’%’;”
echo “”
done

### 2.3 角色管理脚本
– **管理角色**:
#!/bin/bash
# manage_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 “CREATE ROLE ‘role_app’ IF NOT EXISTS;”
mysql -h 192.168.1.10 -P 4000 -u root -e “CREATE ROLE ‘role_readonly’ IF NOT EXISTS;”

# 授予角色权限
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘role_app’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT SELECT ON fgedudb.* TO ‘role_readonly’;”

# 授予用户角色
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_app’ TO ‘app_fgedu’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “GRANT ‘role_readonly’ TO ‘readonly_fgedu’@’%’;”

# 设置默认角色
mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_app’ FOR ‘app_fgedu’@’%’;”
mysql -h 192.168.1.10 -P 4000 -u root -e “SET DEFAULT ROLE ‘role_readonly’ FOR ‘readonly_fgedu’@’%’;”

## 3. 安全管理技巧

### 3.1 SSL证书管理
– **生成SSL证书**:
#!/bin/bash
# generate_ssl.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

mkdir -p /tidb/ssl
cd /tidb/ssl

# 生成CA证书
openssl genrsa -out ca-key.pem 2048
openssl req -new -key ca-key.pem -out ca-csr.pem -subj “/CN=TiDB CA”
openssl x509 -req -in ca-csr.pem -signkey ca-key.pem -out ca.pem

# 生成服务器证书
openssl genrsa -out server-key.pem 2048
openssl req -new -key server-key.pem -out server-csr.pem -subj “/CN=192.168.1.10”
openssl x509 -req -in server-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem

# 生成客户端证书
openssl genrsa -out client-key.pem 2048
openssl req -new -key client-key.pem -out client-csr.pem -subj “/CN=client”
openssl x509 -req -in client-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem

# 设置权限
chmod 600 *.pem

### 3.2 安全审计脚本
– **审计用户操作**:
#!/bin/bash
# audit_users.sh
# from:www.itpux.com.qq113257174.wx:itpux-com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息