服务器数据库安全: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 数据库将显著提升安全性。如果有具体错误或版本差异,请提供更多细节以便进一步协助。

相关推荐
551只玄猫9 分钟前
【数据库原理 实验报告1】创建和管理数据库
数据库·sql·学习·mysql·课程设计·实验报告·数据库原理
q54314708721 分钟前
MySQL SQL100道基础练习题
数据库·mysql
xdscode31 分钟前
Linux云服务器安装openclaw,并对接飞书通道
linux·服务器·飞书·openclaw
lswzw1 小时前
win11家庭版 安装 openclaw
服务器
zhoupenghui1681 小时前
mysql 中如果条件where中有or,则要求or两边的字段都必须有索引,否则不能用到索引, 为什么?
数据库·mysql·索引
LegendNoTitle1 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
2401_877274241 小时前
从匿名管道到 Master-Slave 进程池:Linux 进程间通信深度实践
linux·服务器·c++
feng_you_ying_li2 小时前
linux之用户的权限详解(4)
linux·运维·服务器
eggwyw2 小时前
完美解决phpstudy安装后mysql无法启动
数据库·mysql
java修仙传2 小时前
MySQL 事务隔离级别详解
数据库·mysql·oracle