mysql安装完成后如何进行安全加固_mysql环境安全操作

来源:这里教程网 时间:2026-02-28 20:51:47 作者:

修改 root 默认密码并禁用空密码登录

MySQL 5.7+ 安装后默认会生成一个临时

root
密码,位于
/var/log/mysqld.log
(Linux)或错误日志中;若跳过此步直接用空密码登录,等于裸奔。必须第一时间重置:

启动 MySQL 并跳过权限检查:
mysqld_safe --skip-grant-tables &
连接后执行:
UPDATE mysql.user SET authentication_string=PASSWORD('YourStrongPass123') WHERE User='root';
(MySQL 5.7)或
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass123';
(8.0+)
运行
FLUSH PRIVILEGES;
生效,然后重启正常服务
确认
plugin
字段不是
auth_socket
(Ubuntu 常见),否则密码无效:查
SELECT User, Host, plugin FROM mysql.user;
,必要时改回
mysql_native_password

删除匿名用户和测试数据库

安装脚本常遗留安全隐患:匿名用户(

''@'localhost'
)、
test
库、通配符主机(
'root'@'%'
)。这些是暴力扫描和提权的首选入口。

删匿名用户:
DROP USER ''@'localhost';
删测试库:
DROP DATABASE IF EXISTS test;
,并删其权限记录:
DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';
检查远程 root:
SELECT User, Host FROM mysql.user WHERE User='root' AND Host!='localhost';
,非必要一律
DROP USER
执行
FLUSH PRIVILEGES;
后,用新账号重新登录验证

限制 root 登录来源并创建专用管理账号

允许

root
从任意 IP 登录(
'root'@'%'
)等于把锁孔焊死却把钥匙挂在门把手上。生产环境必须收窄访问范围。

只保留
'root'@'localhost'
,如需远程管理,新建低权限账号:
CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY 'StrongPass456';
授最小必要权限:
GRANT SELECT, INSERT, UPDATE ON myapp.* TO 'admin'@'192.168.1.%';
,避免
GRANT ALL
启用强制 SSL(若业务允许):
ALTER USER 'admin'@'192.168.1.%' REQUIRE SSL;
确认 bind-address 在
my.cnf
中设为
127.0.0.1
或内网 IP,而非
0.0.0.0

启用日志审计与定期检查配置

没日志 = 没证据。MySQL 自带的通用查询日志和慢日志不开启审计,但错误日志、二进制日志(binlog)和系统变量状态能暴露异常行为。

my.cnf
中启用关键日志:
log_error = /var/log/mysql/error.log
general_log = OFF
(调试外禁止开),
log_bin = ON
(便于追踪变更)
检查敏感变量:
SHOW VARIABLES LIKE 'secure_file_priv';
应为具体路径(如
/var/lib/mysql-files/
),不能是
NULL
或空,否则
LOAD DATA INFILE
可读任意文件
禁用本地文件导入(除非绝对需要):
SET GLOBAL local_infile = OFF;
,并在启动参数加
--local-infile=0
定期运行
mysql_secure_installation
(仅限 5.7 及以前),它会自动执行上述多数操作,但 8.0+ 需手动补全

真正容易被忽略的是

secure_file_priv
local_infile
的组合风险——攻击者一旦拿到 SQL 注入点,这两项配置不当就可能直接读取服务器上的
/etc/passwd
或 Web 配置文件。

相关推荐