这是一份非常全面和专业的 SQL Server 安全配置检查清单与优化方案。它从外部到内部,从架构到细节,系统地涵盖了安全加固的各个方面。
网络隔离与防火墙
服务与端口
身份验证模式
sa 账户已重命名且禁用,或设置一个极其复杂的密码并妥善保管。服务账户
NT SERVICE\MSSQLSERVER),切勿使用 Local System 或 Administrator。实例级权限
sysadmin、serveradmin、securityadmin 等高权限服务器角色?sysadmin 成员。sysadmin 应仅限于极少数受信任的管理员。processadmin, diskadmin)替代 sysadmin。SELECT pr.[name], pr.[type_desc], pr.is_disabled
FROM sys.server_principals pr
JOIN sys.server_role_members rm ON pr.principal_id = rm.member_principal_id
JOIN sys.server_principals role ON role.principal_id = rm.role_principal_id
WHERE role.[name] IN ('sysadmin', 'securityadmin', 'serveradmin')
ORDER BY role.[name], pr.[name];
安全功能配置
xp_cmdshell 是否启用?OLE Automation Procedures 是否启用?CLR Integration 是否启用?Remote Access 是否启用?Cross DB Ownership Chaining 是否启用?EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
SELECT name, value_in_use FROM sys.configurations
WHERE name IN (
'xp_cmdshell',
'Ole Automation Procedures',
'clr enabled',
'remote access',
'cross db ownership chaining'
);
数据库用户与角色
sa)?是否滥用 db_owner 角色?db_owner、db_securityadmin 成员,确保其必要性。数据加密
.mdf, .ldf)和备份文件。务必备份证书和私钥!数据脱敏与审计
补丁与更新
漏洞评估与合规
备份与灾难恢复安全
1. 查找弱密码或未启用策略的 SQL 登录名:
SELECT name, is_policy_checked, is_expiration_checked
FROM sys.sql_logins
WHERE is_policy_checked = 0 OR is_expiration_checked = 0;
2. 查找具有 sysadmin 权限的登录名:
SELECT name FROM sys.server_principals
WHERE IS_SRVROLEMEMBER('sysadmin', name) = 1
AND type IN ('S', 'U') -- SQL and Windows logins
ORDER BY name;
3. 检查数据库中的用户及其角色:
SELECT dp.name AS UserName, USER_NAME(drm.role_principal_id) AS RoleName
FROM sys.database_principals dp
LEFT JOIN sys.database_role_members drm ON dp.principal_id = drm.member_principal_id
WHERE dp.type IN ('S', 'U') -- SQL and Windows users
AND dp.name NOT IN ('dbo', 'guest', 'sys', 'INFORMATION_SCHEMA')
ORDER BY dp.name;
SQL Server 安全是一个系统性的工程,需要将严格的配置、精细的权限管理、数据加密、持续的监控和定期的更新结合起来。本方案提供了一个从外到内的加固框架,务必在实施前进行完整的测试,并根据您组织的具体安全策略和合规要求(如等保2.0、GDPR、PCI-DSS)进行调整。
最重要的第一步:启用强身份验证、禁用不必要的功能、收紧 sysadmin 权限,并开启基础审计。