MySQL 超级用户(root)权限控制:Ubuntu 系统安全配置

为保障MySQL数据库安全,需严格控制root权限。以下为Ubuntu系统的关键配置步骤:

1. 初始安全设置
sudo mysql_secure_installation

  • 交互式向导设置root密码
  • 移除匿名用户
  • 禁止远程root登录
  • 删除测试数据库
  • 重载权限表
2. 禁止root远程访问

编辑MySQL配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]段添加:

skip-networking=0
bind-address=127.0.0.1

3. 创建受限管理员账户
CREATE USER 'admin'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

4. root权限最小化
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'localhost';
GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE 
ON 指定数据库.* TO 'root'@'localhost';

5. 启用审计日志
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

添加配置:

plugin-load=audit_log.so
audit_log_format=JSON
audit_log_policy=ALL

6. 设置访问频率限制

安装插件:

INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';

配置阈值(单位:毫秒):

SET GLOBAL connection_control_failed_connections_threshold=3;
SET GLOBAL connection_control_min_connection_delay=1000;

7. 定期权限审计

使用检查脚本:

mysql -u root -p -e "SELECT user,host FROM mysql.user;" > user_audit.log
mysql -u root -p -e "SHOW GRANTS FOR 'root'@'localhost';" > root_grants.log

8. 启用SSL加密

生成证书:

sudo mysql_ssl_rsa_setup --uid=mysql

配置文件添加:

[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

9. 防火墙配置
sudo ufw allow from 可信IP to any port 3306
sudo ufw deny 3306

10. 自动更新策略
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

/etc/apt/apt.conf.d/50unattended-upgrades中添加:

Unattended-Upgrade::Origins-Pattern {
    "o=MySQL";
};

最佳实践

  • 每月执行权限审计:mysql> SHOW GRANTS FOR 'root'@'localhost';
  • 使用sudo mysql -u admin -p代替root登录
  • 敏感操作记录到syslog:SET GLOBAL log_output = 'TABLE';
  • 启用二进制日志:SET GLOBAL binlog_format = 'ROW';

通过以上配置,可显著降低root账户被滥用的风险,同时满足$CIA$三元组(机密性、完整性、可用性)的安全要求。配置后需重启服务:

sudo systemctl restart mysql

更多推荐