首页主机资讯Ubuntu MySQL如何保障数据安全

Ubuntu MySQL如何保障数据安全

时间2025-11-19 00:37:03发布访客分类主机资讯浏览1048
导读: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 3306sudo ufw enablesudo ufw status
  • 禁用或限制本地文件读取,降低 SQL 注入读取敏感文件的风险:local-infile=0
  • 运行 MySQL 服务以 mysql 用户运行,避免以 root 启动:[mysql.server] user=mysql
  • 防暴力破解:启用 connection_control 插件并设置阈值与延迟,例如:
    plugin-load-add=connection_control.soSET GLOBAL connection_control_failed_connections_threshold=3;
    SET GLOBAL connection_control_min_connection_delay=10000; (单位毫秒)。

三 加密与密钥管理

  • 传输加密(SSL/TLS):
    1. 生成证书(示例):
      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
    2. 配置服务端(/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
    3. 重启:sudo systemctl restart mysql
    4. 客户端连接时启用 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
    5. 在授权中强制 SSL:GRANT ... REQUIRE SSL; ;如需双向校验可用 REQUIRE X509|ISSUER|SUBJECT '...'
    6. 注意: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 迁移至 LUKSVeraCrypt 加密卷后修改 datadir 并重启(适合对静态数据做兜底保护)。

四 备份恢复与审计监控

  • 定期备份与校验:使用 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 useGRANT ... 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
Ubuntu MySQL如何卸载 Flutter在Debian上的安全最佳实践

游客 回复需填写必要信息