Ubuntu 上保障 MySQL 数据安全的可落地方案
一 身份与访问控制
sudo mysql_secure_installation。CREATE USER 'app'@'localhost' IDENTIFIED BY 'StrongPass!23'; GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO 'app'@'localhost'; FLUSH PRIVILEGES;CREATE USER 'remote'@'203.0.113.10' IDENTIFIED BY 'StrongPass!45'; GRANT SELECT,INSERT,UPDATE ON appdb.* TO 'remote'@'203.0.113.10'; FLUSH PRIVILEGES;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 并配合防火墙白名单。sudo ufw allow from 203.0.113.10 to any port 3306;sudo ufw enable;sudo ufw status。local-infile=0。[mysql.server] user=mysql。connection_control 插件并设置阈值与延迟,例如:plugin-load-add=connection_control.so;SET GLOBAL connection_control_failed_connections_threshold=3;SET GLOBAL connection_control_min_connection_delay=10000;(单位毫秒)。三 加密与密钥管理
sudo mkdir -p /etc/mysql/sslsudo 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):[mysqld] ssl-ca=/etc/mysql/ssl/server-cert.pem; ssl-cert=/etc/mysql/ssl/server-cert.pem; ssl-key=/etc/mysql/ssl/server-key.pemsudo systemctl restart mysqlmysql -u app -p --ssl-ca=/etc/mysql/ssl/server-cert.pem --ssl-cert=/etc/mysql/ssl/server-cert.pem --ssl-key=/etc/mysql/ssl/server-key.pemGRANT ... REQUIRE SSL;;如需双向校验可用 REQUIRE X509|ISSUER|SUBJECT '...'。[mysqld] 中启用 innodb_encrypt_tables=ON; innodb_encrypt_log=ON;,重启后执行ALTER INSTANCE ROTATE INNODB MASTER KEY;(创建/轮换主密钥),再对库表启用:ALTER DATABASE mydb ENCRYPTION='Y'; 或 ALTER TABLE mytable ENCRYPTION='Y';SELECT TABLE_NAME, CREATE_OPTIONS FROM information_schema.tables WHERE TABLE_SCHEMA='mydb';AES_ENCRYPT()/AES_DECRYPT() 并在应用侧妥善管理密钥。datadir 迁移至 LUKS 或 VeraCrypt 加密卷后修改 datadir 并重启(适合对静态数据做兜底保护)。四 备份恢复与审计监控
mysqldump 做逻辑备份,例如mysqldump -u backup -p --single-transaction --routines --triggers --databases appdb > backup_$(date +%F).sql;apt update && apt upgrade 保持 Ubuntu 与 MySQL 的安全修复及时;仅使用官方仓库与可信源。五 快速检查清单
| 检查项 | 推荐配置 | 验证方式 |
|---|---|---|
| 远程 root 登录 | 禁用 | SELECT Host, User FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); 应为空 |
| 账号最小权限 | 仅授予必要库表与操作 | SHOW GRANTS FOR 'app'@'localhost'; |
| 传输加密 | 强制 SSL/TLS | \s 显示 SSL: Cipher in use;GRANT ... REQUIRE SSL; |
| 失败登录限流 | 启用 connection_control | SHOW VARIABLES LIKE 'connection_control%'; |
| 本地文件读取 | 禁用 local_infile | SHOW VARIABLES LIKE 'local_infile'; 为 OFF |
| 备份与恢复 | 定期逻辑备份并演练 | 近期备份文件存在且可恢复至临时实例 |
以上措施覆盖了身份鉴别、访问控制、传输与静态加密、网络与系统加固、备份审计等关键面,按此实施可显著提升 Ubuntu 上 MySQL 的数据安全水位。