Ubuntu MySQL如何保障数据安全
导读:Ubuntu 上保障 MySQL 数据安全的可落地方案 一 身份与访问控制 运行安全初始化脚本,完成设置强 root 密码、删除匿名用户、禁止 root 远程登录、删除测试库、重载权限表等基础加固:sudo mysql_secure_in...
Ubuntu 上保障 MySQL 数据安全的可落地方案
一 身份与访问控制
- 运行安全初始化脚本,完成设置强 root 密码、删除匿名用户、禁止 root 远程登录、删除测试库、重载权限表等基础加固:
sudo mysql_secure_installation。 - 按最小权限原则创建业务账号并精确授权,避免使用 root 进行日常操作:
CREATE USER 'app'@'localhost' IDENTIFIED BY 'StrongPass!23'; GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO 'app'@'localhost'; FLUSH PRIVILEGES; - 如需远程访问,仅开放必要来源 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'; FLUSH PRIVILEGES; - 在 MySQL 授权中强制使用 SSL/TLS:
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 限制端口访问:
sudo ufw allow from 203.0.113.10 to any port 3306;sudo ufw enable;sudo ufw status。 - 禁用或限制本地文件读取,降低 SQL 注入读取敏感文件的风险:
local-infile=0。 - 运行 MySQL 服务以 mysql 用户运行,避免以 root 启动:
[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;(单位毫秒)。
三 加密与密钥管理
- 传输加密(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):
[mysqld] 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:
mysql -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.pem - 在授权中强制 SSL:
GRANT ... REQUIRE SSL;;如需双向校验可用REQUIRE X509|ISSUER|SUBJECT '...'。 - 注意:MySQL 不支持加密的私钥,如私钥有密码需先解密为明文再配置。
- 生成证书(示例):
- 存储加密:
- InnoDB 表空间加密(TDE):在
[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并重启(适合对静态数据做兜底保护)。
- InnoDB 表空间加密(TDE):在
四 备份恢复与审计监控
- 定期备份与校验:使用
mysqldump做逻辑备份,例如
mysqldump -u backup -p --single-transaction --routines --triggers --databases appdb > backup_$(date +%F).sql;
定期在隔离环境演练恢复,校验数据一致性与可用性。 - 日志与审计:启用并合理轮转 错误日志、慢查询日志、二进制日志;必要时短期开启 general_log 排查问题,避免长期开启影响性能。
- 安全更新与补丁:通过
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 的数据安全水位。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MySQL如何保障数据安全
本文地址: https://pptw.com/jishu/750734.html
