在CentOS服务器中运行数据库服务时,若访问控制配置不当,很容易出现未授权用户访问敏感数据、恶意篡改表结构甚至删除数据库的情况。做好数据库访问控制是服务器数据安全防护的核心环节之一,需要从多个层面进行配置优化。

数据库访问控制的核心原则
实施数据库访问控制前,需要先明确几个核心原则,避免配置过程中出现权限过度开放的问题:
- 最小权限原则:仅给用户分配完成工作所需的最低权限,禁止直接授予ALL PRIVILEGES等全局高权限
- 最小暴露原则:数据库服务仅对必要的IP地址开放访问,禁止将端口直接暴露在公网
- 职责分离原则:不同业务模块使用不同的数据库账号,避免单个账号权限覆盖所有业务数据
CentOS系统层面的访问限制
首先需要在系统层面限制数据库服务的访问范围,减少外部攻击面。以MySQL数据库为例,默认监听3306端口,可通过防火墙规则限制访问来源。
配置Firewalld防火墙规则
CentOS 7及以上版本默认使用Firewalld作为防火墙管理工具,可通过以下命令限制仅允许指定IP访问数据库端口:
# 允许192.168.1.100访问3306端口 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept' # 重新加载防火墙规则 firewall-cmd --reload # 查看当前规则是否生效 firewall-cmd --list-all
修改数据库监听地址
默认情况下部分数据库会监听0.0.0.0地址,即所有网卡都可访问,建议修改为仅监听内网网卡或本地回环地址,避免公网直接访问。以MySQL为例,修改配置文件/etc/my.cnf:
[mysqld] # 仅监听本地回环地址,仅服务器本地进程可访问 bind-address = 127.0.0.1 # 若需要内网其他服务器访问,可替换为内网网卡IP,例如192.168.0.1 # bind-address = 192.168.0.1
修改完成后重启MySQL服务使配置生效:
systemctl restart mysqld
数据库内部的权限配置
系统层面的限制完成后,还需要在数据库内部做精细化的权限划分,避免权限滥用。
创建分级数据库用户
不要直接使用root账号进行日常业务操作,应根据业务需求创建不同权限的用户。以下是MySQL中创建用户的示例:
-- 创建仅对test库有查询权限的只读用户,仅允许192.168.1.%网段访问 CREATE USER 'readonly_user'@'192.168.1.%' IDENTIFIED BY 'StrongPassword123!'; GRANT SELECT ON test.* TO 'readonly_user'@'192.168.1.%'; -- 创建对test库有增删改查权限的业务用户,仅允许指定IP访问 CREATE USER 'business_user'@'192.168.1.100' IDENTIFIED BY 'AnotherStrongPass456!'; GRANT SELECT,INSERT,UPDATE,DELETE ON test.* TO 'business_user'@'192.168.1.100'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
清理冗余权限
定期检查数据库中的用户权限,删除不再使用的账号,回收多余的权限:
-- 查看所有用户及其权限范围 SELECT user,host FROM mysql.user; -- 删除无用用户 DROP USER 'unused_user'@'%'; -- 回收用户的删除权限 REVOKE DELETE ON test.* FROM 'business_user'@'192.168.1.100';
访问审计与异常监控
除了权限限制,还需要开启访问审计,便于后续追溯异常操作。
开启MySQL通用日志与慢查询日志
修改MySQL配置文件开启日志功能:
[mysqld] # 开启通用日志,记录所有连接和查询操作 general_log = ON general_log_file = /var/log/mysql/general.log # 开启慢查询日志,记录执行时间超过1秒的查询 slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1
注意需要给日志文件设置正确的权限,避免MySQL进程无法写入:
touch /var/log/mysql/general.log /var/log/mysql/slow.log chown mysql:mysql /var/log/mysql/general.log /var/log/mysql/slow.log systemctl restart mysqld
定期审计日志
可编写简单的脚本定期分析通用日志,排查异常访问行为,例如非工作时间的访问、来自未授权IP的访问等。
常见配置误区
在实际配置中,需要避免以下几个常见错误:
- 使用弱密码作为数据库账号密码,建议密码包含大小写字母、数字和特殊字符,长度不低于12位
- 给用户授予
GRANT OPTION权限,该权限允许用户将自己的权限授予其他用户,存在权限扩散风险 - 允许
root账号从任意IP访问,一旦root密码泄露,攻击者可直接控制整个数据库 - 长期不更新数据库版本,旧版本可能存在已知的权限绕过漏洞,需定期更新到稳定安全版本
通过以上系统层面、数据库层面、审计层面的多层配置,可大幅提升CentOS服务器中数据库访问的安全性,有效降低数据泄露和非法操作的风险。日常运维中还需要定期巡检权限配置和日志,及时发现并修复安全隐患。