type
Post
status
Published
date
May 21, 2026
slug
summary
数据库基线核查checklist
tags
数据库
等保
category
技术分享
icon
password
一、身份认证与账户策略
1.1 认证模式检查
1 (仅 Windows 认证) ,若为混合模式 (0),需确保
sa 已禁用或强密码。
返回值 | 含义 | 身份验证模式 |
1 | 仅集成身份验证 | Windows 身份验证(只能用 Windows 账号登录,不支持 SQL Server 独立账号密码) |
0 | 混合模式身份验证 | SQL Server 和 Windows 身份验证(既可以用 Windows 账号,也可以用 sa 等独立账号登录) |
1.2 sa 账户状态
is_disabled = 1 (禁用) ,若必须启用,必须重命名且设置强密码。

1.3 空账户
默认结果为空 ,严禁存在无密码账户。

1.4 登录失败锁定【未查看】
使用 Windows 身份验证
- 当你使用 Windows 账户(如
DOMAIN\User)登录 SQL Server 时,SQL Server 完全依赖 Windows 操作系统进行身份验证。
- 如果该 Windows 账户因为在其他服务(如远程桌面、文件共享)中密码输入错误过多而触发了 Windows 账户锁定策略,那么该账户在尝试登录 SQL Server 时也会失败,并提示账户已锁定。
- 此时,SQL Server 只是“传递”了 Windows 的锁定状态。
使用 SQL Server 身份验证 (如 sa 账户)
- 原生行为:SQL Server 2019 默认没有“连续失败 X 次自动锁定 Y 分钟”的原生配置功能。即使你开启了“强制实施密码策略” (
CHECK_POLICY = ON),这也只是强制密码符合 Windows 的复杂性要求(长度、字符种类等),并不包含失败计数锁定功能。
- 为何会被锁定?
- 手动禁用:管理员通过
ALTER LOGIN [name] DISABLE禁用了账户。 - 映射关系:如果该 SQL 登录名实际上映射到了一个 Windows 主体(较少见,通常 SQL 登录名是独立的),则受 Windows 策略影响。
- 误解:很多时候,应用报错“登录失败”被误认为是“账户锁定”,实际上只是密码错误。
- 第三方扩展/审计:某些企业安全插件或触发器可能模拟了这种行为,但这并非 SQL Server 引擎的标准功能。
1.5 密码复杂度策略
在 Windows Server 2012 及更高版本(包括 2016, 2019, 2022)上,创建新的 SQL 登录名时,
CHECK_POLICY 的默认值通常是 ON。如果此策略被启用,密码必须满足以下条件👇:
- 不包含用户名:密码不能包含用户账户名(SAM Account Name)或全名的一部分(超过两个连续字符)。
- 长度:至少 6 个字符(这是 Windows API 的硬性下限,尽管最佳实践建议更长)。
- 字符种类:必须包含以下四类字符中的三类:
- 英文大写字母 (A-Z)
- 英文小写字母 (a-z)
- 数字 (0-9)
- 非字母数字符号 (例如:! $ # %)

针对单一用户的检查方式:SQL Server 2019 Management Studio → 安全性 → 登录名 → 属性

二、权限管理与最小特权
2.1 sysadmin 成员列表
仅限必要管理员加入,严禁应用账号、普通用户加入此角色。

2.2 公共角色权限 (public)
- 每个数据库都有
public角色,所有数据库用户(包括新建的用户)默认自动成为其成员;
- 给
public授权 = 给所有用户授权,因此严禁给 public 分配过高权限(如ALTER、CONTROL、DELETE等)。
- 全新数据库中,
public仅默认拥有CONNECT(连接数据库)、VIEW ANY COLUMN ENCRYPTION KEY DEFINITION等基础权限,这是正常的;
- 若输出中出现
SELECT、INSERT、EXECUTE等权限,说明有人给public额外授权,存在权限风险。

2.3 Guest 用户状态
排查
guest 账户(数据库默认来宾账户)权限风险。
字段名 | 含义 | 关键说明 |
is_disabled | guest 账户是否禁用 | 0= 启用(高风险),1= 禁用(安全) |
type_desc | 账户类型 | 固定为 SQL_USER,是系统内置账户 |
principal_id | 主体 ID | guest 账户的固定 ID 为 2,不可修改 |
2.4 xp_cmdshell 状态
查看 xp_cmdshell 的启用状态,
run_value = 1 是高风险状态,生产环境必须设为 0;
2.5 其他扩展存储过程状态查询

三、网络与表面面积配置
3.1 端口/IP查看
- 端口建议修改为非常用高位端口。
- IP仅限非公网地址。

3.2 检查远程连接开关

远程DAC查看,run_value = 0 → 合规(仅本地可用,推荐); run_value = 1 → 不合规(允许远程使用DAC,高风险)。

3.3 加密连接
需要改为 Yes,同时需提前配置服务器证书(否则用自签名证书)。

四、审计与日志
4.1 登陆审计

4.2 日志轮转

4.3 日志信息
查看日志记录了的信息格式

4.4 默认跟踪配置
默认跟踪是 SQL Server 最轻量化的审计工具,几乎不消耗服务器资源,能自动记录以下关键操作(安全审计必备):
- 数据库对象的创建 / 修改 / 删除(表、存储过程、视图等);
- 登录账户的权限变更、创建 / 删除;
- 数据库备份 / 还原、分离 / 附加操作;
- 服务器配置选项的修改。
status = 1 (运行中) ,用于记录部分 DDL 操作和性能事件。

五、数据保护与加密
5.1 数据库加密状态
TDE(透明数据加密)是 SQL Server 对数据库文件的实时加密 / 解密,作用是:
- 防止攻击者窃取数据库文件(.mdf/.ldf)后直接附加读取数据;
- TDE 保护的是数据库文件本身,而非传输过程(传输加密需配合 “强制加密连接”);
- 启用 TDE 后,务必备份加密证书和私钥,这是数据库恢复的关键。

进阶版:

字段 / 值 | 含义 & 合规要求 |
encryption_state = 3 | 数据库已启用 TDE 加密(合规状态,核心业务库推荐配置) |
encryption_state = 0/NULL | 未加密(无加密密钥,非核心库可接受,核心库高风险) |
tempdb 加密状态 | 只要实例中有任意数据库启用 TDE,tempdb 会自动加密(属于正常现象) |
encryptor_type | 加密器类型: CERTIFICATE(证书,推荐)、ASYMMETRIC KEY(非对称密钥) |
5.2 敏感数据列加密
实机核查密码、电话、身份证等敏感信息是否加密。
非通用型手段【根据实际列命名决定】:

六、补丁安全
6.1 补丁/版本查看

关键标识说明:
RTM:初始发布版本(无补丁,必须升级);
SPx:服务包(Service Pack,大版本补丁);
CUx:累积更新(Cumulative Update,月度安全补丁);
GDR:安全更新(仅修复高危漏洞,无功能更新)。