服务器数据库安全:MySQL 开启 SSL 连接,禁止远程 root 登录并限制 IP 访问

MySQL 数据库安全配置指南

为了确保 MySQL 数据库的安全,建议实施以下措施:开启 SSL 连接以加密数据传输、禁止远程 root 登录以防止未授权访问、限制 IP 访问以控制连接来源。本指南将逐步指导您完成配置过程,基于 MySQL 官方最佳实践(适用于 MySQL 5.7 及以上版本)。在操作前,请务必备份数据库和配置文件(如 my.cnf),并在测试环境中验证。

1. 开启 SSL 连接

开启 SSL 可以加密客户端与服务器之间的通信,防止数据被窃听。步骤如下:

  • 步骤 1: 生成 SSL 证书和密钥

    在 MySQL 服务器上运行以下命令(使用 OpenSSL 工具):

    bash 复制代码
    # 创建证书目录
    sudo mkdir -p /etc/mysql/ssl
    sudo cd /etc/mysql/ssl
    
    # 生成 CA 证书
    sudo openssl genrsa 2048 > ca-key.pem
    sudo openssl req -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
    
    # 生成服务器证书
    sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem
    sudo openssl rsa -in server-key.pem -out server-key.pem
    sudo openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
    
    # 生成客户端证书(可选,用于双向验证)
    sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem
    sudo openssl rsa -in client-key.pem -out client-key.pem
    sudo openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
    
    # 设置文件权限
    sudo chmod 600 /etc/mysql/ssl/*
    sudo chown mysql:mysql /etc/mysql/ssl/*
  • 步骤 2: 配置 MySQL 启用 SSL

    编辑 MySQL 配置文件(通常位于 /etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 部分添加以下内容:

    ini 复制代码
    [mysqld]
    ssl-ca = /etc/mysql/ssl/ca-cert.pem
    ssl-cert = /etc/mysql/ssl/server-cert.pem
    ssl-key = /etc/mysql/ssl/server-key.pem
    require_secure_transport = ON  # 强制所有连接使用 SSL
  • 步骤 3: 重启 MySQL 服务

    bash 复制代码
    sudo systemctl restart mysql
  • 步骤 4: 验证 SSL 是否生效

    连接到 MySQL 并运行:

    sql 复制代码
    SHOW VARIABLES LIKE '%ssl%';
    -- 应看到 have_ssl 为 YES
    STATUS;
    -- 在连接信息中查看 SSL 状态(如 Cipher in use)
2. 禁止远程 root 登录

禁止 root 用户从远程登录,减少攻击面。root 用户应仅限本地访问。

  • 步骤 1: 修改 root 用户权限

    使用 MySQL 命令行连接到数据库(本地登录):

    sql 复制代码
    -- 检查当前 root 用户权限
    SELECT user, host FROM mysql.user WHERE user = 'root';
    
    -- 如果 root 有远程访问权限(如 host 为 '%'),则删除
    DROP USER 'root'@'%';
    
    -- 确保 root 仅限本地访问
    CREATE USER 'root'@'localhost' IDENTIFIED BY '您的强密码';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  • 步骤 2: 验证远程登录被禁止

    尝试从远程机器连接:

    bash 复制代码
    mysql -u root -p -h 服务器IP
    -- 应提示访问被拒绝
3. 限制 IP 访问

通过 GRANT 语句限制用户只能从特定 IP 地址连接,提高访问控制。

  • 步骤 1: 创建或修改用户,绑定特定 IP

    例如,创建一个新用户 admin,仅允许从 IP 192.168.1.100 访问:

    sql 复制代码
    -- 创建用户并限制 IP
    CREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY '您的强密码';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.100' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    -- 如果已有用户,修改其 host
    UPDATE mysql.user SET host = '192.168.1.100' WHERE user = 'admin';
    FLUSH PRIVILEGES;
  • 步骤 2: 限制 MySQL 监听 IP(可选)

    在 MySQL 配置文件中,绑定到特定 IP(如仅监听内网):

    ini 复制代码
    [mysqld]
    bind-address = 192.168.1.100  # 替换为您的服务器内网 IP
  • 步骤 3: 验证 IP 限制

    从非授权 IP 尝试连接:

    bash 复制代码
    mysql -u admin -p -h 服务器IP
    -- 应提示访问被拒绝
总结与注意事项
  • 测试配置 :完成所有步骤后,使用工具如 mysql-client 或应用连接测试 SSL 和 IP 限制。
  • 备份 :操作前备份 my.cnf 和数据库(使用 mysqldump)。
  • 最佳实践
    • 使用强密码(12 位以上,包含字母、数字、符号)。
    • 定期更新 MySQL 和操作系统。
    • 监控日志(/var/log/mysql/error.log)排查问题。
  • 常见问题
    • 如果 SSL 配置失败,检查证书路径和权限。
    • 如果 IP 限制无效,确保防火墙(如 ufw)允许 MySQL 端口(默认 3306)。

通过以上步骤,您的 MySQL 数据库将显著提升安全性。如果有具体错误或版本差异,请提供更多细节以便进一步协助。

相关推荐
虾..21 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙21 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
玄斎21 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
编程小Y1 天前
MySQL 与 MCP 集成全解析(核心原理 + 实战步骤 + 应用场景)
数据库·mysql·adb
rit84324991 天前
C# Socket 聊天室(含文件传输)
服务器·开发语言·c#
hkhkhkhkh1231 天前
Linux设备节点基础知识
linux·服务器·驱动开发
lvbinemail1 天前
Grafana模板自动复制图表
数据库·mysql·zabbix·grafana·监控
weixin_448119941 天前
Datawhale Hello-Agents入门篇202512第1次作业
数据库·sql·mysql
皮皮林5511 天前
有了开源的 MySQL,为什么还要选择 PostgreSQL?
mysql
柏木乃一1 天前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程