MySQL数据库漏洞防护措施实战:从检查到加固全流程

为什么MySQL数据库漏洞防护不能等?

很多新手买完服务器,装上MySQL后就直接用默认配置跑业务。
但网络上的扫描工具和攻击脚本一直在寻找未打补丁的MySQL数据库,一旦命中,轻则数据被删,重则被勒索或拖库。MySQL数据库漏洞防护措施并不是锦上添花,而是保障服务器正常运行的基本操作。 下面我们从零开始,分成几步彻底把漏洞堵上。

动手前需要准备什么?

  • 一台已安装MySQL的Linux服务器(本文以CentOS 7/Ubuntu 20.04为例)
  • 拥有root或sudo权限的账号
  • 能通过SSH连接服务器(或者你用的宝塔/1Panel等面板,也能直接执行命令)
  • 记录下当前MySQL的root密码(如果忘记,需要先重置)
如果你用的是宝塔面板,操作路径大同小异:在“数据库”页面可以执行SQL,但建议直接进入终端执行命令,更灵活。

第一步:检查当前MySQL版本及已知漏洞

登录服务器,先查看MySQL版本:

mysql -V
# 或者进入MySQL后执行:
SHOW VARIABLES LIKE 'version';

记录版本号(例如8.0.28)。
然后去 MySQL官方安全公告页面 或直接用 searchsploit 工具搜一下该版本是否存在高危漏洞。
如果版本过旧(比如5.6、5.7的低版本),CVE漏洞列表里往往有好几个严重级别的项

执行检查命令(安全扫描):

# 安装 lynis 安全审计工具(可选)
wget https://downloads.cisofy.com/lynis/lynis-3.0.9.tar.gz
tar -xzf lynis-3.0.9.tar.gz && cd lynis
./lynis audit system --test-from-group mysql

lynis 会给出数据库相关的漏洞和配置建议。
如果你不想装第三方工具,直接看下一步手动加固。

第二步:修补已知漏洞——升级MySQL到最新稳定版

升级是最直接、最彻底的MySQL数据库漏洞防护措施
以下命令演示在Ubuntu上更新:

# 添加MySQL官方APT源(获取最新版本)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
sudo apt update
sudo apt install mysql-server

CentOS用户请用:

# 移除旧版MySQL或MariaDB
sudo systemctl stop mysqld
sudo yum remove mysql-server
# 添加MySQL Yum源
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm
sudo yum install mysql-community-server

升级后务必重启并登录验证:

sudo systemctl restart mysqld
mysql -u root -p
SELECT VERSION();

看到版本号变为最新(如8.0.37),说明漏洞补丁已打上。

第三步:加固配置与账号权限(堵住常见漏洞入口)

很多MySQL漏洞并非代码问题,而是配置不当导致。
以下几项是必须处理的:

1. 移除匿名账户和空密码账户

-- 查看是否有匿名用户或空密码
SELECT User, Host, authentication_string FROM mysql.user WHERE User='' OR authentication_string='';

-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';

-- 强制空密码用户设置密码
ALTER USER 'emptyuser'@'localhost' IDENTIFIED BY '新强密码';

2. 关闭不需要的远程访问

-- 只允许本地登录(除非业务必要)
UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;

3. 限制应用账号权限(最小权限原则)

如果网站或应用使用单独的数据库账号,不要给它ALL PRIVILEGES,只给必要权限:

GRANT SELECT, INSERT, UPDATE, DELETE ON 业务库.* TO 'appuser'@'localhost';
-- 绝对不要 GRANT ALL 或 SUPER 权限给普通应用

4. 修改MySQL默认端口(非必须,但能减少扫描攻击)

编辑配置文件 /etc/mysql/my.cnf(或 /etc/my.cnf),找到 port=3306 改为其他端口(如 13306):

[mysqld]
port=13306

改完后重启MySQL,并在防火墙放行新端口。

避坑:新手常犯的三个错误

错误1:升级后忘记执行 mysql_upgrade

从低版本跨版本升级后,系统表可能需要更新。
执行:

sudo mysql_upgrade -u root -p
sudo systemctl restart mysqld

不执行可能导致部分功能异常甚至无法启动。

错误2:删除了root账户但没保留备用账号

如果你想在本地只保留一个应用账号,请先在MySQL里创建一个拥有全部权限的备用管理员:

CREATE USER 'admin'@'localhost' IDENTIFIED BY '复杂密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

错误3:升级后忘记更新防火墙规则

如果你改了端口,记得在iptables或firewalld里放行新端口,否则应用连不上数据库。

验证:我的MySQL漏洞防护措施生效了吗?

执行以下检查清单,逐条勾选:

  1. SELECT VERSION(); —— 版本是最新的(例如8.0.37)
  2. SELECT User, Host FROM mysql.user; —— 没有匿名用户和不需要的远程账户
  3. SHOW VARIABLES LIKE 'port'; —— 端口不是默认3306(如果你改了)
  4. 尝试用root从远程服务器登录:mysql -h 你的IP -u root -p —— 应该被拒绝
  5. 查看MySQL错误日志:sudo tail -50 /var/log/mysql/error.log —— 没有大量连接错误或已知漏洞警告

如果以上全部通过,说明你的MySQL数据库漏洞防护措施已经落地。
建议每季度重复一次版本检查和权限审计,把安全变成日常习惯。

如果你在操作中遇到报错(如“Access denied”或“mysqld服务无法启动”),优先回看本文的避坑部分,或者检查命令是否有拼写错误。
数据库安全没有一劳永逸,但只要跟着步骤走一遍,就能挡住90%的初级攻击。

分享到:
上一篇
Tomcat安全漏洞加固教程:从零开始加固你的Web服务器
下一篇
Redis漏洞利用与安全加固:零基础从配置到实战
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意