SQL系统安全加固核心是管账号、锁连接、限权限。具体包括清理冗余账号与空口令,强制密码策略与生命周期管理,实施最小权限分配并禁用guest账户,以及启用加密通信与协议收紧。

SQL系统安全加固不是堆功能,而是做减法、控边界、加锁链。核心就三点:管住谁(账号)、锁住怎么连(认证与传输)、限住能干啥(权限)。下面用高频实战场景直接说清楚怎么做。
清理冗余账号和空口令
这是最常被忽略的第一步。测试账号、开发遗留账号、匿名用户(user为空)、host为'%'的宽泛账号,都是攻击入口。
- MySQL中执行:red">SELECT user, host, authentication_string FROM mysql.user; 查看所有账号,重点找user=''、host='%'、authentication_string为空的记录
- 删掉无用账号:DROP USER 'test'@'%'; DROP USER ''@'localhost'; 注意必须指定host,避免误删
- SQL Server里进SSMS → 安全性 → 登录名,右键“BUILTIN\Administrators” → 属性 → 勾选“拒绝连接”+“禁用登录”
- 删完务必执行FLUSH PRIVILEGES;(MySQL)或重启服务(SQL Server部分配置需重启生效)
强制密码策略与生命周期管理
弱口令=送钥匙。不能只改sa/root密码,要让系统自动拦住不合规口令。
- MySQL 8.0+启用校验插件:INSTALL PLUGIN validate_password SONAME 'validate_password.so';
再设强度:长度≥10、含2数字、1特殊字符、禁止字典常见词
- SQL Server中对每个登录名右键→属性→勾选“强制实施密码策略”+“强制密码过期”(建议90天)
- 创建新用户时直接带策略:CREATE USER 'app_rw'@'192.168.1.%' IDENTIFIED BY 'P@ssw0rd2025' PASSWORD EXPIRE INTERVAL 90 DAY FAILED_LOGIN_ATTEMPTS 5;
最小权限分配与guest账户限制
一个查报表的账号,不该有DROP TABLE权限;一个业务库用户,不该拥有sysadmin服务器角色。
- SQL Server中检查每个登录名的“服务器角色”(如去掉public以外的多余角色),再进具体数据库→“用户”→取消未授权的“数据库角色成员身份”(如去掉db_owner,只留db_datareader)
- MySQL中不用GRANT ALL,按需授权:GRANT SELECT, INSERT ON finance.invoice TO 'fin_app'@'10.10.20.%';
- 禁用guest用户访问业务库:REVOKE CONNECT FROM guest;(SQL Server)或在每个数据库中执行REVOKE ALL ON *.* FROM 'guest'@'%';(MySQL)
明文传密码等于把钥匙写在信封上寄出去。尤其跨网段、云环境,必须加密链路。
- SQL Server:打开“SQL Server配置管理器”→ SQL Server网络配置 → MSSQLSERVER的协议 → 右键TCP/IP → 属性 → 标志页 → “强行加密”设为“是”
- MySQL:在my.cnf中添加[mysqld] ssl-mode=REQUIRED,并配置server-key.pem/server-cert.pem
- 客户端连接时显式要求SSL:mysql -u app_user -p --ssl-mode=REQUIRED -h db.example.com
基本上就这些。不复杂但容易忽略——真正卡住攻击的,往往就是那个没删的test账号、那个开着的guest、或者那条没加密的连接。加固不是一次动作,而是定期巡检账号列表、审核权限变更、更新密码策略的持续习惯。
以上就是SQL系统安全加固怎么做_高频场景实例讲解便于理解使用【指导】的详细内容,更多请关注php中文网其它相关文章!