MySQL在Ubuntu中的安全性如何保障
小樊
44
2025-12-28 01:04:49
MySQL在Ubuntu上的安全性保障
一 基础安装与初始化加固
更新系统并安装:执行sudo apt update && sudo apt install mysql-server ,保持系统与数据库版本为最新稳定版。
运行安全初始化向导:执行sudo mysql_secure_installation ,按提示完成设置强 root 密码 、删除匿名用户 、禁止 root 远程登录 、删除测试数据库 并重载权限表 。
若遇到 root 认证方式导致无法设置密码(如 auth_socket),先登录 MySQL 执行:ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘YourStrongPassword’; 再重新运行安全脚本。
建立日常运维专用账号,遵循最小权限原则 ,避免直接使用 root 进行应用连接或日常维护。
二 身份与访问控制
按业务最小权限创建账号并精确授权,例如:
本地应用账号:CREATE USER ‘app’@‘localhost’ IDENTIFIED BY ‘StrongPass!23’;
GRANT SELECT,INSERT,UPDATE,DELETE ON appdb. TO ‘app’@‘localhost’; *
如需远程访问,仅开放必要来源 IP,并创建专用远程账号 (避免使用 root):
CREATE USER ‘remote’@‘203.0.113.10’ IDENTIFIED BY ‘StrongPass!45’;
GRANT SELECT,INSERT,UPDATE ON appdb. TO ‘remote’@‘203.0.113.10’; *
在授权中强制使用加密传输:GRANT … TO ‘remote’@‘203.0.113.10’ REQUIRE SSL;
定期审计与清理:列出并禁用多余账号、弱口令账号,按需撤销权限或删除用户。
三 网络与系统加固
默认仅本地访问:在**/etc/mysql/mysql.conf.d/mysqld.cnf** 的 [mysqld] 中设置bind-address = 127.0.0.1 ;确需远程时再改为0.0.0.0 并配合防火墙白名单。
用 UFW 限制来源 IP 与端口:例如sudo ufw allow from 203.0.113.10 to any port 3306 ,并启用防火墙。
降低攻击面:禁用本地文件读取(local-infile=0 ),限制最大连接数(如 max_connections=2000 ),仅必要时修改默认端口。
防暴力破解:启用 connection_control 插件并设置阈值与延迟,例如:
plugin-load-add=connection_control.so
SET GLOBAL connection_control_failed_connections_threshold=3;
SET GLOBAL connection_control_min_connection_delay=10000; (单位毫秒)
四 加密与密钥管理
传输加密(SSL/TLS):
生成自签名证书(示例):
sudo mkdir -p /etc/mysql/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/mysql/ssl/server-key.pem -out /etc/mysql/ssl/server-cert.pem
服务端配置(/etc/mysql/mysql.conf.d/mysqld.cnf):
ssl-ca=/etc/mysql/ssl/server-cert.pem; ssl-cert=/etc/mysql/ssl/server-cert.pem; ssl-key=/etc/mysql/ssl/server-key.pem
重启:sudo systemctl restart mysql ;客户端连接时启用 SSL;在授权中强制 REQUIRE SSL 。
存储加密:
InnoDB 表空间加密(TDE):启用 innodb_encrypt_tables=ON; innodb_encrypt_log=ON; ,重启后执行ALTER INSTANCE ROTATE INNODB MASTER KEY; ,再对库表启用:ALTER DATABASE mydb ENCRYPTION=‘Y’; 或 ALTER TABLE mytable ENCRYPTION=‘Y’;
列级加密:对敏感列使用 AES_ENCRYPT()/AES_DECRYPT() ,并在应用侧妥善管理密钥。
兜底方案:将 datadir 置于 LUKS 等文件系统加密卷后再启动 MySQL。
五 备份恢复与审计监控
备份与校验:使用 mysqldump 做逻辑备份,例如:
mysqldump -u backup -p --single-transaction --routines --triggers --databases appdb > backup_$(date +%F).sql
定期在隔离环境演练恢复,校验一致性与可用性。
日志与审计:启用并合理轮转错误日志、慢查询日志、二进制日志 ;必要时短期开启 general_log 排查问题,避免长期开启影响性能。
安全更新与补丁:通过 apt update && apt upgrade 及时获取 Ubuntu 与 MySQL 的安全修复;仅使用官方仓库与可信源。