首页/安全/安全加固速查/MySQL 对外暴露与账号来源收敛
服务与端口收敛50 条

MySQL 对外暴露与账号来源收敛

3306 对公网开放是撞库与勒索的高发入口:数据库只应监听内网,账号来源限制到具体网段,禁止 % 泛授权。

安全加固速查安全更新于 2026-10-13

数据库对外的三层风险

数据库端口暴露在公网时,风险来自三层叠加:一是撞库与弱口令,攻击者可以持续尝试;二是账号来源范围过宽,例如允许从任意主机连接的账号,一旦口令泄露,任何位置的攻击者都能连;三是缺少网络层限制,脚本小子在全网扫描时就能顺手发现。核查要一起看监听地址、账号来源与边界放行三项,任何一项没收紧都算未完成。

基本信息

加固项数据库暴露面与账号来源收敛
适用平台Linux 与 Windows(MySQL 与 MariaDB)
风险等级高
基线不暴露公网,账号来源限制到具体网段
端口默认 3306

典型使用场景

  • 暴露面核查:确认数据库未对公网开放
  • 账号治理:清理来源过宽的账号与匿名账号
  • 入侵排查:勒索事件中数据库被删除往往从暴露开始
  • 上线检查:新库部署时一次性配置好监听地址与账号来源
  • 合规整改:数据访问控制要求账号来源可限定

核查命令

核查命令
ss -tlnp | grep ':3306 '
mysql -uroot -p -e "SELECT user, host FROM mysql.user ORDER BY host;" 2>/dev/null
mysql -uroot -p -e "SHOW VARIABLES LIKE 'bind_address'; SHOW VARIABLES LIKE 'skip_networking';" 2>/dev/null
mysql -uroot -p -e "SELECT user, host, plugin FROM mysql.user WHERE host='%';" 2>/dev/null   # 来源过宽的账号

收敛动作

收敛动作
# 配置文件:[mysqld] 段中把监听地址收敛
grep -n 'bind-address' /etc/my.cnf /etc/mysql/my.cnf 2>/dev/null
# 账号来源收窄(示例,执行前确认无活跃连接依赖)
# RENAME USER 'app'@'%' TO 'app'@'10.0.1.%';
# DROP USER ''@'localhost';       # 清理匿名账号
FLUSH PRIVILEGES;                # 权限变更后刷新

三处收敛点

收敛点当前风险形态目标状态
监听地址监听在所有地址上仅监听回环或内网地址
账号来源账号允许从任意主机连接限制到业务网段或具体地址
账号口令存在弱口令或空口令账号强口令并纳入口令管理
匿名账号存在无用户名账号删除全部匿名账号
边界放行安全组或防火墙放行该端口仅对授权网段放行
来源过宽的账号配合弱口令,在扫描器眼里属于秒级可发现的目标:先把账号来源收窄,再谈其他加固。账号变更属于高风险操作,建议在变更窗口内执行,并事先确认没有应用以该账号从非预期网段连接。
改监听地址后本机连接不受影响,但远程连接会全部断开:变更前先确认应用使用的连接方式与来源地址,避免把正常业务一起中断。数据库账号的授权在修改后需要刷新权限表才会立即生效。

核查报告的写法

建议按四行输出:监听地址、账号来源分布、匿名与空口令账号数量、边界放行范围。每一行给出当前值与结论,并附上执行的命令与输出。这四行覆盖了暴露的三层与账号本身,结论清晰,也便于复评时逐项核对是否仍符合要求。

易错点

  • 只改监听地址不改账号来源:内网任意主机仍可用过宽账号连接
  • 改监听地址前不确认应用连接方式:远程连接全部中断,影响业务
  • 忽略匿名账号与空口令账号:它们是扫描器最容易命中的目标
  • 权限变更后不刷新权限表:变更未立即生效,造成「改了没用」的错觉
  • 变更不在窗口内执行:账号与来源调整会影响活跃连接,需安排在低峰期

数据来源与参考

  • MySQL 官方文档:Access Control
  • 等保 2.0:访问控制

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌