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

1次阅读

必须立即修改root默认密码并禁用空密码登录:先用mysqld_safe –skip-grant-tables启动,再执行alter user或update更新密码,flush privileges生效,确保plugin为mysql_native_password,删除匿名用户、test库及远程root账号,限制root仅localhost登录,创建专用管理账号并授最小权限,启用ssl、绑定内网ip、开启错误日志与binlog,严格配置secure_file_priv和local_infile。

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

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

MySQL 5.7+ 安装后默认会生成一个临时 root 密码,位于 /var/log/mysqld.loglinux)或错误日志中;若跳过此步直接用空密码登录,等于裸奔。必须第一时间重置:

  • 启动 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_socketubuntu 常见),否则密码无效:查 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.loggeneral_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_privlocal_infile 的组合风险——攻击者一旦拿到 SQL 注入点,这两项配置不当就可能直接读取服务器上的 /etc/passwd 或 Web 配置文件。

text=ZqhQzanResources