本文档风哥主要介绍MySQL 8.4的安全管理,包括用户权限管理、密码策略、网络访问控制和SSL/TLS配置等方面。风哥教程参考MySQL官方文档Security等。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 MySQL安全概述
MySQL安全是指保护MySQL数据库系统免受未授权访问、数据泄露和其他安全威胁的措施。学习交流加群风哥微信: itpux-com
1.2 安全威胁
MySQL面临的安全威胁包括:
- 未授权访问:未经授权的用户访问数据库
- SQL注入:通过恶意SQL语句攻击数据库
- 密码破解:通过暴力破解获取用户密码
- 数据泄露:敏感数据被窃取
- 拒绝服务:通过大量请求使服务不可用
1.3 安全策略
MySQL安全策略包括:
- 最小权限原则:用户只获得必要的权限
- 密码策略:强密码要求和定期更新
- 网络访问控制:限制网络访问范围
- 加密通信:使用SSL/TLS加密数据传输
- 定期审计:监控和审计数据库活动
Part02-生产环境规划与建议
2.1 安全架构设计
设计MySQL安全架构,包括网络隔离、防火墙配置和访问控制等。
2.2 权限管理规划
规划MySQL用户权限,根据用户角色分配适当的权限。
2.3 网络安全规划
规划网络安全,包括网络隔离、防火墙规则和VPN访问等。
Part03-生产环境项目实施方案
3.1 用户权限管理
MySQL用户权限管理的具体操作:
# mysql -u root -p -e “SELECT user, host FROM mysql.user;”
# 创建用户
# mysql -u root -p -e “CREATE USER ‘fgedu’@’localhost’ IDENTIFIED BY ‘Fgedu123!’;”
# 授予权限
# mysql -u root -p -e “GRANT SELECT, INSERT, UPDATE, DELETE ON fgedudb.* TO ‘fgedu’@’localhost’;”
# 查看用户权限
# mysql -u root -p -e “SHOW GRANTS FOR ‘fgedu’@’localhost’;”
# 撤销权限
# mysql -u root -p -e “REVOKE DELETE ON fgedudb.* FROM ‘fgedu’@’localhost’;”
# 删除用户
# mysql -u root -p -e “DROP USER ‘fgedu’@’localhost’;”
# 刷新权限
# mysql -u root -p -e “FLUSH PRIVILEGES;”
3.2 密码策略
MySQL密码策略的配置:
# mysql -u root -p -e “SHOW VARIABLES LIKE ‘validate_password%’;”
# 设置密码策略
# mysql -u root -p -e “SET GLOBAL validate_password.policy = ‘STRONG’;”
# mysql -u root -p -e “SET GLOBAL validate_password.length = 12;”
# mysql -u root -p -e “SET GLOBAL validate_password.number_count = 1;”
# mysql -u root -p -e “SET GLOBAL validate_password.special_char_count = 1;”
# mysql -u root -p -e “SET GLOBAL validate_password.uppercase_count = 1;”
# mysql -u root -p -e “SET GLOBAL validate_password.lowercase_count = 1;”
# 修改用户密码
# mysql -u root -p -e “ALTER USER ‘fgedu’@’localhost’ IDENTIFIED BY ‘NewPassword123!’;”
# 定期更新密码
# mysql -u root -p -e “ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘NewRootPassword123!’;”
3.3 网络访问控制
MySQL网络访问控制的配置:
# mysql -u root -p -e “CREATE USER ‘fgedu’@’192.168.1.%’ IDENTIFIED BY ‘Fgedu123!’;”
# 限制用户只能从特定IP访问
# mysql -u root -p -e “CREATE USER ‘fgedu’@’192.168.1.100’ IDENTIFIED BY ‘Fgedu123!’;”
# 配置防火墙
# firewall-cmd –permanent –add-port=3306/tcp
# firewall-cmd –reload
# 查看防火墙规则
# firewall-cmd –list-ports
# 绑定MySQL到特定IP
# vi /etc/my.cnf
[mysqld]
bind-address = 192.168.1.100
# 重启MySQL服务
# systemctl restart mysqld
3.4 SSL/TLS配置
MySQL SSL/TLS的配置:
# mkdir -p /mysql/ssl
# cd /mysql/ssl
# 生成CA证书
# openssl genrsa 2048 > ca-key.pem
# openssl req -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
# 生成服务器证书
# openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem
# openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
# 生成客户端证书
# openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem
# openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 02 > client-cert.pem
# 设置权限
# chmod 600 *.pem
# chown mysql:mysql *.pem
# 配置MySQL使用SSL
# vi /etc/my.cnf
[mysqld]
ssl-ca=/mysql/ssl/ca-cert.pem
ssl-cert=/mysql/ssl/server-cert.pem
ssl-key=/mysql/ssl/server-key.pem
# 重启MySQL服务
# systemctl restart mysqld
# 验证SSL配置
# mysql -u root -p -e “SHOW VARIABLES LIKE ‘%ssl%’;”
# 强制使用SSL
# mysql -u root -p -e “GRANT ALL PRIVILEGES ON *.* TO ‘fgedu’@’localhost’ REQUIRE SSL;”
Part04-生产案例与实战讲解
4.1 安全加固案例
MySQL安全加固的实际案例:
# mysql -u root -p -e “DELETE FROM mysql.user WHERE user=”;”
# 案例2:禁用远程root登录
# mysql -u root -p -e “DELETE FROM mysql.user WHERE user=’root’ AND host!=’localhost’;”
# 案例3:删除测试数据库
# mysql -u root -p -e “DROP DATABASE IF EXISTS test;”
# 案例4:限制root权限
# mysql -u root -p -e “REVOKE ALL PRIVILEGES ON *.* FROM ‘root’@’%’;”
# 案例5:启用审计日志
# vi /etc/my.cnf
[mysqld]
audit_log=ON
audit_log_file=/mysql/logs/audit.log
audit_log_format=JSON
# 重启MySQL服务
# systemctl restart mysqld
4.2 安全审计案例
MySQL安全审计的实际案例:
# mysql -u root -p -e “UPDATE performance_schema.setup_instruments SET ENABLED = ‘YES’ WHERE NAME LIKE ‘%statement%’;”
# 案例2:使用sys schema查看审计信息
# mysql -u root -p -e “SELECT * FROM sys.statement_analysis ORDER BY exec_count DESC LIMIT 10;”
# 案例3:监控用户登录
# mysql -u root -p -e “SELECT * FROM mysql.general_log WHERE command_type=’Connect’ ORDER BY event_time DESC LIMIT 10;”
# 案例4:使用慢查询日志
# vi /etc/my.cnf
[mysqld]
slow_query_log=1
slow_query_log_file=/mysql/logs/slow.log
long_query_time=1
# 重启MySQL服务
# systemctl restart mysqld
# 分析慢查询日志
# mysqldumpslow /mysql/logs/slow.log
Part05-风哥经验总结与分享
5.1 常见安全问题
MySQL安全管理中常见的问题包括:
- 弱密码:使用简单密码容易被破解
- 过度权限:用户拥有超出需要的权限
- 网络暴露:数据库服务暴露在公网
- 缺少审计:无法追踪数据库活动
- 未加密通信:数据传输未加密
5.2 最佳安全实践
1. 使用强密码:设置复杂的密码策略,定期更新密码
2. 最小权限原则:用户只获得必要的权限
3. 网络隔离:限制数据库服务的网络访问范围
4. 加密通信:使用SSL/TLS加密数据传输
5. 定期审计:监控和审计数据库活动
6. 定期备份:确保数据安全,防止数据丢失
7. 及时更新:保持MySQL版本和补丁的更新
8. 安全配置:禁用不必要的功能和服务
9. 监控告警:设置安全事件的监控和告警
10. 安全培训:对数据库管理员进行安全培训
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
