温馨提示×

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 的安全修复;仅使用官方仓库与可信源。

0