
1. 项目概述从合规要求到实战命令在信息安全领域等级保护测评简称“等保测评”是每个系统管理员和数据库管理员都必须面对的一道“必答题”。它不是一次性的安全检查而是一套持续性的合规框架旨在通过技术和管理手段保障信息系统安全稳定运行。当测评对象是承载着核心业务数据的 SQL Server 数据库时这项工作就变得尤为关键和具体。很多 DBA 或安全工程师在初次接触 SQL Server 等保测评时往往会感到无从下手测评要求文档洋洋洒洒但具体到数据库层面到底要查什么用什么查标准答案是什么这份指南的目的就是为你提供一套可直接用于实战的 SQL Server 测评命令集并深入解释每条命令背后的安全逻辑和合规要求。我们不止于罗列命令更会拆解等保2.0中关于数据库安全的相关控制点告诉你为什么需要执行这些检查以及如何根据检查结果进行加固。无论你是正在准备测评还是希望日常提升数据库安全水位这些命令和思路都将成为你工具箱里的利器。2. 等保2.0中与SQL Server相关的核心控制点解析等保2.0将安全要求分为安全通用要求和安全扩展要求。对于 SQL Server 这类数据库系统我们主要关注安全通用要求中的部分控制点它们直接映射到数据库的配置、访问和审计层面。2.1 身份鉴别与访问控制这是等保测评的基石。对应到 SQL Server核心是确保“谁”能“以何种方式”访问“哪些数据”。测评重点包括口令复杂度与生存周期检查是否启用了密码策略密码长度、复杂性是否满足要求是否有强制修改周期。登录失败处理是否设置了账户锁定策略例如连续失败登录多少次后锁定账户锁定时间多长。这是防止暴力破解的关键。权限最小化原则检查用户和角色的权限分配是否遵循最小权限原则特别是sa等内置高权限账户的使用情况以及是否有多余的默认账户被启用。远程连接管理检查是否禁用了不必要的协议如命名管道是否对远程连接地址进行了限制。注意很多老旧系统为了方便常常使用弱密码或空密码或者让应用程序直接使用sa账户连接这在等保测评中是严重扣分项必须整改。2.2 安全审计“无审计无安全”。等保要求安全事件应可追溯。对于 SQL Server这意味着审计功能启用是否启用了 SQL Server 审计或更细粒度的服务器/数据库审计规范。审计内容覆盖审计日志是否记录了关键事件如成功的和失败的登录尝试、对敏感数据表如包含用户信息、交易记录的表的访问SELECT、UPDATE、DELETE、权限变更GRANT、DENY、架构更改CREATE、ALTER、DROP等。日志保护与存储审计日志是否被妥善保护防止非授权删除或篡改是否有足够的存储空间和归档策略。2.3 入侵防范与恶意代码防范数据库服务器本身也应具备一定的防御能力。补丁管理SQL Server 实例是否安装了最新的安全补丁已知的高危漏洞如某些版本的远程代码执行漏洞是否已被修复禁用危险功能是否禁用了xp_cmdshell、OLE Automation Procedures等可能被利用来执行操作系统命令或发起攻击的扩展存储过程端点安全数据库服务器所在的主机是否安装了防恶意代码软件并定期更新2.4 数据安全与备份恢复这是数据库的“生命线”。数据完整性是否使用了约束、触发器等方式保障业务数据的完整性敏感信息保护对于身份证号、手机号、密码等敏感数据是否进行加密存储如使用 Always Encrypted或脱敏处理备份与恢复是否有完整的备份策略全备、差异备、日志备备份周期是否满足业务恢复时间目标RTO和恢复点目标RPO是否定期进行恢复演练理解了这些控制点我们接下来的命令集就有了明确的靶心。每一条命令都是为了验证或获取上述某个或某几个控制点的当前状态。3. 实战测评命令全集与深度解读以下命令均在 SQL Server Management Studio (SSMS) 中以具有相应权限的账户通常需要VIEW SERVER STATE、VIEW ANY DEFINITION等权限执行。我们将按检查类别组织命令。3.1 身份鉴别与账户安全核查这部分命令用于检查登录账户的安全配置。命令1检查登录账户及认证模式SELECT name, type_desc, is_disabled, create_date, modify_date FROM sys.server_principals WHERE type IN (S, U, G) -- S: SQL登录, U: Windows登录, G: Windows组 ORDER BY type_desc, name;解读与操作意图这条命令列出所有服务器级登录主体。is_disabled列为 1 表示账户已禁用这是安全检查的第一步应禁用所有测试账户、默认示例账户如BUILTIN\Guests以及不再使用的账户。同时观察type_desc等保通常建议优先使用 Windows 身份验证‘WINDOWS_LOGIN’而非 SQL Server 身份验证‘SQL_LOGIN’因为前者可以集成操作系统的账户管理策略。命令2检查密码策略与过期SELECT name, type_desc, is_disabled, LOGINPROPERTY(name, IsMustChange) AS must_change, -- 下次登录是否必须改密 LOGINPROPERTY(name, DaysUntilExpiration) AS days_until_expire, -- 密码过期天数 LOGINPROPERTY(name, LockoutTime) AS lockout_time, -- 锁定时间 LOGINPROPERTY(name, BadPasswordCount) AS bad_password_count, -- 错误密码次数 LOGINPROPERTY(name, BadPasswordTime) AS bad_password_time -- 上次错误密码时间 FROM sys.server_principals WHERE type S -- 仅查看SQL登录 AND is_disabled 0; -- 仅查看启用账户解读与操作意图这是等保“身份鉴别”要求的直接体现。你需要关注must_change是否为1对于新建账户或强制改密后应为此状态。days_until_expire应为一个合理的正数如90表示密码将在多少天后过期。为0表示已过期NULL表示密码永不过期不符合等保要求。lockout_time如果不为NULL说明该账户因多次登录失败被锁定。结合bad_password_count可以分析攻击迹象。 测评时需要确认 SQL Server 是否强制执行了操作系统的密码策略在服务器属性-安全性中查看或者对于独立部署是否配置了类似的账户锁定阈值和锁定时间。命令3检查sa账户状态与远程连接SELECT name, is_disabled FROM sys.server_principals WHERE name sa; -- 检查是否允许远程连接需查看服务器配置 EXEC sp_configure remote access; -- 已过时但某些版本仍可参考 EXEC sp_configure remote admin connections; -- 专用管理员连接(DAC)解读与操作意图sa是最高权限账户是攻击的首要目标。等保测评中通常会要求1) 重命名sa账户或 2) 禁用sa账户is_disabled1。绝对禁止使用默认的sa账户和弱密码进行远程业务连接。remote admin connections通常只应在紧急故障排查时启用日常应禁用。3.2 权限与访问控制检查权限泛滥是内部威胁和数据泄露的主要根源。命令4检查服务器角色成员SELECT r.name AS role_name, m.name AS member_name FROM sys.server_role_members rm JOIN sys.server_principals r ON rm.role_principal_id r.principal_id JOIN sys.server_principals m ON rm.member_principal_id m.principal_id WHERE r.type R ORDER BY r.name, m.name;解读与操作意图重点检查sysadmin、securityadmin、processadmin等高级服务器角色的成员。任何非绝对必要的账户都不应属于sysadmin。一个常见的错误是为了方便将应用程序的登录账户直接加入sysadmin这等同于赋予了该应用对数据库服务器的完全控制权风险极高。命令5检查数据库用户及角色映射-- 切换到具体业务数据库 USE [YourDatabaseName]; GO SELECT dp.name AS user_name, dp.type_desc, r.name AS role_name FROM sys.database_principals dp LEFT JOIN sys.database_role_members drm ON dp.principal_id drm.member_principal_id LEFT JOIN sys.database_principals r ON drm.role_principal_id r.principal_id WHERE dp.type IN (S, U, G) -- SQL用户, Windows用户, Windows组 AND dp.name NOT IN (dbo, guest, INFORMATION_SCHEMA, sys) ORDER BY dp.name;解读与操作意图这条命令查看在特定数据库内每个用户属于哪些数据库角色如db_owner,db_datareader,db_datawriter。等保要求权限最小化因此需要逐一审查普通业务用户是否被赋予了db_owner权限这通常是不必要的。只读报表用户是否仅属于db_datareader角色是否存在权限过大的自定义角色命令6检查直接对象权限USE [YourDatabaseName]; GO SELECT USER_NAME(grantee_principal_id) AS grantee, OBJECT_NAME(major_id) AS object_name, permission_name, state_desc FROM sys.database_permissions WHERE class_desc OBJECT_OR_COLUMN AND minor_id 0 -- 对象级权限 ORDER BY grantee, object_name;解读与操作意图除了角色权限用户或角色可能被直接授予了表、视图、存储过程上的权限如SELECT,UPDATE,EXECUTE。这条命令能列出所有直接授权。测评时需要关注是否有过于宽泛的授权例如将UPDATE权限授予了整个表而不是通过存储过程来间接更新。3.3 安全配置与漏洞防范检查命令7检查扩展存储过程状态EXEC sp_configure show advanced options, 1; RECONFIGURE; GO EXEC sp_configure xp_cmdshell; EXEC sp_configure Ole Automation Procedures; -- 其他如 sp_send_dbmail 等也应根据业务需要检查 GO EXEC sp_configure show advanced options, 0; RECONFIGURE;解读与操作意图xp_cmdshell允许在 SQL Server 内执行操作系统命令是攻击者梦寐以求的跳板。Ole Automation Procedures同样可能带来安全风险。在等保测评中除非业务有明确且经过审批的需求否则这些选项的run_value应为0禁用。启用它们需要强有力的理由和严格的操作审计。命令8检查SQL Server版本与补丁SELECT VERSION AS sql_server_version;解读与操作意图输出结果包含了 SQL Server 的完整版本号、内部版本号和补丁级别。你需要将此信息与微软官方安全公告进行比对确认是否已安装最新的安全更新。运行不受支持的旧版本如 SQL Server 2008 R2 已结束扩展支持在等保测评中会被视为高风险项。命令9检查数据库引擎配置EXEC sp_configure;解读与操作意图这条命令返回所有服务器配置选项。除了上述高级选项还需关注cross db ownership chaining是否启用通常应禁用以防止权限提升。scan for startup procs是否扫描自动执行的存储过程需确认这些存储过程的安全性。clr enabled是否启用了 CLR 集成如果未使用建议禁用。3.4 安全审计功能检查命令10检查服务器审计规范SELECT audit_id, name, status_desc, create_date, modify_date FROM sys.server_audits; SELECT audit_id, action_id, class_desc, is_group, containing_group_name FROM sys.server_audit_specifications_details AS sd JOIN sys.server_audit_specifications AS s ON sd.server_specification_id s.server_specification_id;解读与操作意图第一句查看定义了哪些服务器审计。status_desc应为ON。第二句查看审计规范的具体细节关注是否审计了SUCCESSFUL_LOGIN_GROUP和FAILED_LOGIN_GROUP成功/失败登录、LOGOUT_GROUP注销、SERVER_ROLE_MEMBER_CHANGE_GROUP服务器角色变更等关键事件组。命令11检查数据库审计规范USE [YourDatabaseName]; GO SELECT audit_id, name, status_desc FROM sys.database_audit_specifications; SELECT audit_id, action_id, class_desc, schema_name, object_name, column_name FROM sys.database_audit_specification_details AS dd JOIN sys.database_audit_specifications AS d ON dd.database_specification_id d.database_specification_id;解读与操作意图数据库级审计更细粒度。检查是否对关键表的SELECT、INSERT、UPDATE、DELETE操作进行了审计action_id对应SL、IN、DL、UP。等保三级以上通常要求对重要数据的访问行为进行审计。命令12查看默认跟踪Default TraceSELECT * FROM fn_trace_getinfo(default);解读与操作意图SQL Server 默认跟踪会记录一些关键事件如对象创建/删除、权限更改等。虽然它不是等保要求的正式审计手段但可以作为辅助信息来源。检查其是否运行property2的value1以及日志文件路径。3.5 数据安全与备份状态检查命令13检查数据库备份历史USE msdb; GO SELECT TOP 50 bs.database_name, bs.type, -- D: 数据库, I: 差异, L: 日志 bs.backup_start_date, bs.backup_finish_date, bmf.physical_device_name, bs.backup_size / 1024 / 1024 AS backup_size_mb FROM backupset bs INNER JOIN backupmediafamily bmf ON bs.media_set_id bmf.media_set_id WHERE bs.database_name NYourDatabaseName ORDER BY bs.backup_start_date DESC;解读与操作意图这是验证备份策略是否有效执行的最直接证据。你需要确认备份类型是否完整全备、差异备、日志备备份周期是否符合既定的 RPO 要求例如每天一次全备每小时一次日志备备份文件是否存储在安全、独立的位置physical_device_name命令14检查数据库加密状态USE [YourDatabaseName]; GO SELECT db_name(database_id) AS db_name, encryption_state_desc, key_algorithm, encryptor_type FROM sys.dm_database_encryption_keys;解读与操作意图加密是保护静态数据Data at Rest的重要手段。encryption_state_desc显示了加密状态如ENCRYPTED,UNENCRYPTED。等保对三级及以上系统的重要数据有加密存储要求。这里检查的是透明数据加密TDE状态。对于列级加密如 Always Encrypted需要检查具体的表列属性。4. 测评实操流程与结果分析框架有了命令集我们还需要一个系统的执行流程和分析方法让测评工作有条不紊。4.1 测评前准备与环境确认在运行任何命令前必须做好准备工作获取授权确保你拥有对目标 SQL Server 实例进行安全评估的正式授权。未经授权的扫描和探测可能违反法律或公司政策。明确范围与项目负责人确认需要测评的 SQL Server 实例列表和数据库列表。一个应用系统可能使用多个数据库。选择工具主要使用 SSMS。对于批量检查多个实例可以考虑使用 PowerShell 脚本如Invoke-Sqlcmd或第三方安全评估工具但需注意工具的稳定性和对生产环境的影响。制定检查清单将上述命令分类整理成检查清单Checklist并为每项检查预设符合等保要求的“预期结果”或“合规标准”。4.2 分阶段命令执行与记录不建议一次性运行所有命令。建议分阶段进行第一阶段信息收集运行命令1、8、9了解实例概况、版本和基础配置。第二阶段账户与权限深度检查运行命令1-6这是核心需要仔细核对每个账户和权限分配。第三阶段安全配置审计运行命令7、10-12检查安全功能和审计状态。第四阶段数据安全与备份验证运行命令13、14。关键操作记录与截图。对每一条命令的执行结果尤其是发现问题的结果进行截图保存。同时将结果整理到 Excel 或专门的测评管理平台中记录“检查项”、“命令”、“结果”、“是否符合”、“证据位置截图路径”、“风险等级”、“整改建议”。4.3 结果分析与风险定级不是所有发现的问题风险等级都一样。你需要根据等保要求和业务影响进行分析发现项风险等级分析依据与整改建议sa账户启用且使用弱密码高危最高权限账户暴露极易导致服务器完全失陷。整改立即修改为强密码若必须使用或创建替代的管理员账户后禁用sa。应用程序账户拥有sysadmin权限高危违背最小权限原则应用漏洞可导致整个数据库沦陷。整改创建仅具备必要数据库对象权限的专用账户供应用使用。未启用登录失败锁定策略中危无法防御暴力破解。整改在服务器属性或组策略中启用“账户锁定阈值”如5次失败。数据库备份超过一周未执行中危/高危无法满足 RPO数据丢失风险高。整改立即制定并执行备份计划验证备份可恢复。xp_cmdshell被启用且无业务必要中危增加了横向移动和命令执行的风险面。整改执行EXEC sp_configure xp_cmdshell, 0; RECONFIGURE;禁用。未对核心业务表配置访问审计低危/中危不符合等保审计要求发生安全事件无法追溯。整改创建数据库审计规范审计核心表的增删改查操作。4.4 报告撰写与整改跟进测评的最终产出是《等保测评报告数据库部分》。报告应包含测评概述时间、人员、被测实例信息。测评方法简述采用的工具和命令集。详细发现以表格形式列出所有检查项、结果、风险等级和证据索引。综合风险分析从整体上评估该 SQL Server 实例的安全状况。整改建议针对每个中、高风险项提出具体、可操作的整改步骤、责任人和建议完成时限。报告提交后安全工作的重点就转移到整改跟进。你需要与系统所有者和运维团队紧密合作推动整改措施落地并在整改完成后进行复测形成安全闭环。5. 常见问题、避坑指南与进阶技巧在实际测评和加固过程中你会遇到各种预料之外的情况。下面分享一些从实战中总结的经验。5.1 命令执行中的常见报错与处理权限不足执行某些命令如查询系统视图、执行sp_configure需要较高权限。确保你使用的登录账户拥有VIEW SERVER STATE、VIEW ANY DEFINITION以及ALTER SETTINGS用于修改配置等权限。实操心得可以创建一个专门用于安全审计的 SQL 登录账户并赋予其必要的权限而不是直接使用sa。对象名无效在用户数据库执行sys.server_xxx视图查询时会报错。记住服务器级视图sys.server_principalssys.server_audits需要在master数据库或任何数据库的上下文中用sys.前缀访问。而数据库级视图sys.database_principals必须在目标用户数据库上下文中执行。配置选项不存在不同版本的 SQL Server 支持的配置选项略有差异。sp_configure显示高级选项后如果找不到xp_cmdshell可能是因为该版本已废弃或更名需查阅对应版本的文档。5.2 测评过程中的典型“坑”与对策“开发/测试环境随便配上生产再改”的思维这是最大的坑。很多不安全的配置如弱密码、宽权限在开发测试环境形成习惯部署生产时被遗忘。对策将安全配置脚本化、基线化并纳入 CI/CD 流水线确保从开发到生产的环境一致性。只查不改报告了事测评发现了风险但业务部门以“影响稳定性”、“没时间”为由拒绝整改。对策在项目初期就明确安全责任将等保合规要求写入运维合同或 SLA。用真实的攻击案例如因弱密码导致的勒索事件说明风险而不仅仅是条款。忽略“默认”和“隐式”权限除了显式授予的权限还要注意public服务器角色和数据库角色的权限以及架构SCHEMA的ALTER、CONTROL权限。进阶检查使用EXECUTE AS USER ‘xxx’;模拟用户上下文再执行SELECT * FROM fn_my_permissions(NULL, ‘SERVER’);和SELECT * FROM fn_my_permissions(NULL, ‘DATABASE’);来查看该用户实际拥有的所有有效权限这比单独查看授权更全面。审计日志成为“摆设”启用了审计但日志存储在数据库文件所在的磁盘磁盘满了导致实例卡死或者日志从未有人查看。对策将审计日志文件路径指向专用、容量充足的磁盘。定期如每天编写自动化脚本分析审计日志提取异常事件如非工作时间的大量失败登录、敏感表的异常访问并发送告警。5.3 让安全更高效的进阶技巧使用策略管理Policy-Based Management对于需要批量管理多个 SQL Server 实例的场景可以定义安全策略如“禁止启用xp_cmdshell”并定期对所有实例进行评估和强制实施这比手动检查高效得多。利用漏洞评估Vulnerability Assessment, VA如果你使用的是 Azure SQL Database 或 SQL Server 2012需配置可以启用内置的漏洞评估功能。它能自动执行许多安全检查并生成带有整改脚本的报告与等保测评要求高度重合是极佳的辅助工具。建立安全基线镜像为不同用途OLTP、报表的 SQL Server 构建标准化的安全加固镜像。新实例从基线镜像创建能确保初始状态就是合规的。关注动态管理视图DMV除了上述命令像sys.dm_exec_sessions查看当前会话、sys.dm_exec_connections查看连接信息也能在实时监控和事件调查中发挥重要作用。例如定期查询sys.dm_exec_sessions可以及时发现异常的长连接或来自异常 IP 的登录。测评和加固不是一劳永逸的而是一个持续的过程。将这些命令和检查点集成到你的日常巡检或自动化监控平台中变被动合规为主动防御才能真正提升 SQL Server 乃至整个业务系统的安全水位。安全没有终点每一次认真的检查和加固都是在为系统的稳定运行增添一块基石。