重要
注意:所有Microsoft Defender for Cloud功能将在
本文列出了一组内置规则,这些规则用于标记安全漏洞,并突出显示不符合最佳做法的情况(如配置错误和权限过多)。 这些规则基于 Microsoft 的最佳做法,并专注于对数据库及其重要数据有最大风险的安全问题。 其中涵盖数据库级别的问题以及服务器级别的安全问题,如服务器防火墙设置和服务器级别的权限。 这些规则还体现了各个监管机构提出的许多要求,旨在满足它们的符合性标准。
适用于:
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Server(所有受支持的版本)
数据库扫描中显示的规则取决于所扫描的 SQL 版本和平台。
有关这些规则的变更的列表,请参阅 SQL 漏洞评估规则变更日志。
相关信息
了解如何在 Azure 中
了解如何 查询、查看和导出漏洞评估结果。
了解如何查看 Defender for SQL 安全警报。
规则类别
SQL 漏洞评估规则有五种类别,分别在以下各部分介绍:
1SQL Server 2012+是指 SQL Server 2012 年及更高版本的所有版本。
2SQL Server 2017+是指 2017 及更高版本的所有 SQL Server版本。
3SQL Server 2016+是指 SQL Server 2016 及更高版本的所有版本。
身份验证和授权
| 规则 ID | 规则标题 | 规则严重性 | 规则描述 | 平台 | 推荐标题 | 评估 ID |
|---|---|---|---|---|---|---|
| VA1017 | 应撤销所有用户(dbo 除外)对 xp_cmdshell 的执行权限 | 高 | xp_cmdshell扩展存储过程生成Windows命令行界面,传入字符串以供执行。 此规则检查是否没有用户(具有 CONTROL SERVER 权限的用户除外,例如 sysadmin 服务器角色的成员)有权执行 xp_cmdshell 扩展存储过程。 |
|
应撤销对所有用户(dbo 除外)的xp_cmdshell执行权限 | 48fad5ca-f530-41bb-9454-c6002bd1085c |
| VA1020 | 数据库用户 GUEST 不应是任何角色的成员 | 高 | 来宾用户允许未映射到特定数据库用户的任何登录名访问数据库。 此规则检查是否没有为来宾用户分配数据库角色。 |
SQL Database |
数据库用户 GUEST 不应是 SQL 数据库中任何角色的成员 | 24b8d8dd-4e2e-4cdf-9fb0-b480401a54e0 |
| VA1042 | 应对除 master、msdb 和 tempdb 以外的所有数据库禁用数据库所有权链接 |
高 | 跨数据库所有权链接是所有权链接的扩展,只不过它跨越了数据库边界。 此规则检查是否对除 master、msdb 和 tempdb 以外的所有数据库禁用了此选项。 对于 master、msdb 和 tempdb,默认情况下启用跨数据库所有权链接。 |
SQL Managed Instance |
对于 SQL Server 上除“master”、“msdb”和“tempdb”之外的所有数据库,应禁用数据库所有权链接 | 4ce5114e-d749-4569-b4e0-24853b1422a4 |
| VA1043 | 主体 GUEST 应无权访问任何用户数据库 | 中型 | 来宾用户允许未映射到特定数据库用户的任何登录名访问数据库。 此规则检查来宾用户是否无法连接到任何数据库。 |
SQL Managed Instance |
主体 GUEST 不应有权访问任何用户 SQL 数据库 | 9a330556-d9f3-43e5-bade-ca4170e10374 |
| VA1046 | 应为所有 SQL 登录名启用 CHECK_POLICY | 低 | CHECK_POLICY 选项允许根据域策略验证 SQL 登录名。 此规则检查是否为所有 SQL 登录名启用了 CHECK_POLICY 选项。 |
SQL Managed Instance |
应为所有 SQL Server 的 SQL 登录名启用CHECK_POLICY | 045516fd-3ec2-4d3f-a519-30f971f1e45f |
| VA1047 | 应为所有 SQL 登录名启用密码过期检查 | 低 | 密码过期策略用于管理密码的使用期限。 当SQL Server强制实施密码过期策略时,系统会提醒用户更改旧密码,并禁用已过期密码的帐户。 此规则检查是否为所有 SQL 登录名启用了密码过期策略。 |
SQL Managed Instance |
应为 SQL Server 上的所有 SQL 登录名启用密码过期检查 | a14a9bb7-237c-4dae-9b36-e8b63d47539c |
| VA1048 | 不应将数据库主体映射到 sa 帐户 |
高 | 攻击者可以利用映射到 sa 帐户的数据库主体将权限提升到 sysadmin |
SQL Managed Instance |
不应将数据库主体映射到 SQL 数据库中的 sa 帐户 | 3cd5e6e8-71bb-40c4-8a08-204959e91a23 |
| VA1052 | 删除作为服务器登录名的 BUILTIN\Administrators | 低 | BUILTIN\Administrators 组包含Windows本地管理员组。 在旧版Microsoft SQL Server中,此组默认具有管理员权限。 此规则检查是否已从SQL Server中删除此组。 |
|
应删除 BUILTIN\Administrators 作为 SQL Server 的服务器登录名 | 2b31ae5a-28ce-42a7-b80c-6430056978b3 |
| VA1053 | 应重命名或禁用默认名称为 sa 的帐户 |
低 |
sa 是一个主体 ID 为 1 的已知帐户。 此规则验证是否已重命名或禁用 sa 帐户。 |
SQL Managed Instance |
应在 SQL Server 上重命名和禁用默认名称为“sa”的帐户 | f9be60bc-423f-4462-adb4-e1be62a9ff39 |
| VA1054 | 不应向 PUBLIC 角色授予对对象或列的过多权限 | 低 | 每个SQL Server登录名都属于公共服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,用户将继承向 public 角色授予的对该对象的权限。 此规则显示所有用户可通过 PUBLIC 角色访问的所有安全对象或列的列表。 |
SQL Database |
不应向公共角色授予对 SQL 数据库中的对象或列的过度权限 | 6aed60ee-9f8a-47f1-a9d1-0305e0ed03ed |
| VA1058 | 应禁用 sa 登录名 |
高 |
sa 是一个主体 ID 为 1 的已知帐户。 此规则验证是否已禁用 sa 帐户。 |
SQL Managed Instance |
应为 SQL Server 禁用“sa”登录 | b1ce48d9-cd89-4d75-84a0-d0dc5505a898 |
| VA1059 | 应禁用 xp_cmdshell | 高 | xp_cmdshell生成Windows命令行界面,并将其传递给字符串以供执行。 此规则检查是否已禁用 xp_cmdshell。 |
SQL Managed Instance |
应为 SQL Server 禁用xp_cmdshell | eadae6a8-e9f4-4173-8c12-6f64703f9d01 |
| VA1067 | Database Mail未使用 XP 时应禁用 | 中型 | 此规则检查未配置database mail配置文件时是否禁用Database Mail。 Database Mail可用于从SQL Server Database Engine发送电子邮件,并且默认禁用。 如果不使用此功能,建议将其禁用以减少外围应用。 |
|
在 SQL Server 上未使用 XP 时,应禁用Database Mail XP | be5465f2-79a8-45aa-bf95-f6106bed0a57 |
| VA1068 | 不应直接向主体授予服务器权限 | 低 | 服务器级权限与服务器级对象相关联,以规定哪些用户可以访问该对象。 此规则检查是否未直接向登录名授予服务器级权限。 |
SQL Managed Instance |
不应直接向 SQL Server 的主体授予服务器权限 | 8f04b48b-b199-45d8-9e5e-c07705a3be2e |
| VA1070 | 数据库用户不应使用与服务器登录名相同的名称 | 低 | 数据库用户可能会使用与服务器登录名相同的名称。 此规则验证没有这样的用户。 |
SQL Managed Instance |
数据库用户不应与模型 SQL 数据库的服务器登录名共享同名 | da61956e-b092-4acd-8b89-a78ddc6e6a46 |
| VA1072 | 身份验证模式应Windows身份验证 | 中型 | 有两种可能的身份验证模式:Windows身份验证模式和混合模式。 混合模式意味着SQL Server同时启用Windows authentication和SQL Server身份验证。 此规则检查身份验证模式是否设置为Windows身份验证。 |
|
身份验证模式应Windows SQL Server 的身份验证 | a89c44c5-0c04-4098-bd15-c617443995b6 |
| VA1094 | 不应直接向主体授予数据库权限 | 低 | 权限是与安全对象关联的规则,用于规定哪些用户可以访问该对象。 此规则检查是否未直接向用户授予 DB 权限。 |
SQL Managed Instance |
不应直接向 SQL Server 的主体授予数据库权限 | f644db73-c0ef-4e1c-846a-5ccf9280b4c1 |
| VA1095 | 不应向 PUBLIC 角色授予过多权限 | 中型 | 每个SQL Server登录名都属于公共服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public 角色的权限。 这会显示向 PUBLIC 角色授予的所有权限的列表。 |
SQL Managed Instance SQL Database |
不应向 SQL 数据库中的 PUBLIC 角色授予过多权限 | 3f2a3bd7-5f36-4d4e-a0a9-f19933ec5bd9 |
| VA1096 | 不应在数据库中向主体 GUEST 授予权限 | 低 | 每个数据库都包含一个名为 GUEST 的用户。 授予 GUEST 的权限由对数据库具有访问权限,但在数据库中没有用户帐户的用户继承。 此规则检查是否已撤销 GUEST 用户的所有权限。 |
SQL Managed Instance SQL Database |
不应在 SQL 数据库中授予主体 GUEST 权限 | 6cbd7126-7091-43f5-8f30-e59cf1a7b6b6 |
| VA1097 | 不应向主体 GUEST 授予对对象或列的权限 | 低 | 每个数据库都包含一个名为 GUEST 的用户。 授予 GUEST 的权限由对数据库具有访问权限,但在数据库中没有用户帐户的用户继承。 此规则检查是否已撤销 GUEST 用户的所有权限。 |
SQL Managed Instance SQL Database |
不应向主体 GUEST 授予对 SQL 数据库中的对象或列的权限 | 063d0390-42cf-4bb5-82a0-72071e1a612f |
| VA1099 | 不应向 GUEST 用户授予对数据库安全对象的权限 | 低 | 每个数据库都包含一个名为 GUEST 的用户。 授予 GUEST 的权限由对数据库具有访问权限,但在数据库中没有用户帐户的用户继承。 此规则检查是否已撤销 GUEST 用户的所有权限。 |
SQL Managed Instance SQL Database |
不应向 GUEST 用户授予对 SQL 数据库安全对象的权限 | 2115ef5d-2c98-484b-ac79-2883371be4a6 |
| VA1246 | 不应使用应用程序角色 | 低 | 应用程序角色是一个数据库主体,它使应用程序能够用其自身的、类似用户的权限来运行。 借助应用程序角色,只有通过特定应用程序连接的用户才能访问特定数据。 应用程序角色基于密码(应用程序通常对其进行硬编码),而不是基于权限(通过密码猜测将数据库公开给应用角色模拟)。 此规则检查数据库中是否未定义任何应用程序角色。 |
SQL Managed Instance SQL Database |
不应在 SQL 数据库中使用应用程序角色 | 123285d4-ef1f-4543-a3ae-3f8656563b38 |
| VA1248 | 用户定义的数据库角色不应为固定角色的成员 | 中型 | 若要轻松管理数据库中的权限SQL Server提供了多个角色,这些角色是将其他主体分组的安全主体。 它们类似于Microsoft Windows作系统中的组。 可将数据库帐户和其他SQL Server角色添加到数据库级角色中。 固定数据库角色的每个成员都可向同一个角色添加其他用户。 此规则检查用户定义的角色是否为固定角色的成员。 |
SQL Managed Instance SQL Database Azure Synapse |
用户定义的数据库角色不应是 SQL 数据库中固定角色的成员 | 31c5a284-c8cd-47c3-9242-2429ed5adf7c |
| VA1267 | 包含的用户应使用Windows身份验证 | 中型 | 包含用户是存在于数据库中并且不需要登录映射的用户。 此规则检查包含的用户是否使用Windows身份验证。 |
SQL Managed Instance |
包含的用户应在SQL Server数据库中使用Windows身份验证 | 25cdb02c-6bd8-4444-8318-9df003edc170 |
| VA1280 | 应最大程度减少授予 public 的服务器权限 | 中型 | 每个SQL Server登录名都属于公共服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,用户将继承向 public 角色授予的对该对象的权限。 此规则检查是否最大程度减少了授予 public 的服务器权限。 |
SQL Managed Instance |
应最大程度地减少向公共授予的服务器权限 | b58b2914-1aec-4469-ae64-21e0078b1729 |
| VA1282 | 应删除孤立角色 | 低 | 孤立角色是指没有成员的用户定义角色。 应消除系统中不需要的孤立角色。 此规则检查是否有任何孤立角色。 |
SQL Managed Instance SQL Database Azure Synapse |
应从 SQL 数据库中删除孤立数据库角色 | 7f5bd587-ba14-49ce-801a-f2613ccc3584 |
| VA2020 | 应向最小主体集授予 ALTER 或 ALTER ANY USER 数据库范围权限 | 高 | 每个SQL Server安全对象都具有与其关联的权限,这些权限可以授予主体。 可以将权限的范围设置为服务器级别(分配给登录名和服务器角色)或数据库级别(分配给数据库用户和数据库角色)。 这些规则检查是否仅向最小主体集授予 ALTER 或 ALTER ANY USER 数据库范围权限。 |
SQL Managed Instance SQL Database Azure Synapse |
应向 SQL 数据库中的最小主体集授予 ALTER 或 ALTER ANY USER 数据库范围的权限 | 08c9b451-08a5-418d-9d2c-fc75197aab44 |
| VA2033 | 应向最小主体集授予对对象或列的 EXECUTE 数据库范围权限 | 低 | 此规则检查哪些主体被授予了对对象或列的 EXECUTE 权限,以确保将此权限授予最少的主体。 每个SQL Server安全对象都具有与其关联的权限,这些权限可以授予主体。 可以将权限的范围设置为服务器级别(分配给登录名和服务器角色)或数据库级别(分配给数据库用户、数据库角色或应用程序角色)。 EXECUTE 权限同时适用于可以在计算列中使用的存储过程和标量函数。 |
SQL Managed Instance SQL Database Azure Synapse |
应向最小主体集授予对 SQL 数据库中的对象或列的 EXECUTE 权限 | 3bee4ca7-e768-497f-ac60-0322225a93ff2 |
| VA2103 | 应撤销对扩展存储过程不必要的执行权限 | 中型 | 扩展存储过程是SQL Server实例可以动态加载和运行的 DLL。 SQL Server打包了许多扩展存储过程,这些存储过程允许与系统 DLL 交互。 此规则检查是否已撤销对扩展存储过程不必要的执行权限。 |
SQL Managed Instance |
对于 SQL Server,应撤销对扩展存储过程的不必要的执行权限 | 0262e851-d99b-4299-bacc-136c92941541 |
| VA2107 | 最小主体集应是固定Azure SQL数据库主数据库角色的成员 | 高 | SQL 数据库在可以添加用户帐户的 master 数据库中提供了两个受限的管理角色,这些角色可授予创建数据库或管理登录名的权限。 此规则检查最小主体集是否为这些管理角色的成员。 |
Azure Synapse |
最小主体集应是固定Azure SQL Database主数据库角色的成员 | a4ca5495-f5ad-4d4d-807b-e8f62541ee34 |
| VA2108 | 最小主体集应该是影响较大的固定数据库角色的成员 | 高 | SQL Server提供角色来帮助管理权限。 角色是对其他主体进行分组的安全主体。 数据库级角色的权限范围为数据库范围。 此规则检查最小主体集是否为固定数据库角色的成员。 |
SQL Managed Instance SQL Database Azure Synapse |
最小主体集应该是 SQL 数据库中固定高影响数据库角色的成员 | 7a0a58ed-8927-4e8d-80c3-59279fa44aa0 |
| VA2109 | 最小主体集应该是影响较小的固定数据库角色的成员 | 低 | SQL Server提供角色来帮助管理权限。 角色是对其他主体进行分组的安全主体。 数据库级角色的权限范围为数据库范围。 此规则检查最小主体集是否为固定数据库角色的成员。 |
SQL Managed Instance SQL Database Azure Synapse |
最小主体集应该是 SQL 数据库中固定影响较低的数据库角色的成员 | 267df805-7fa4-415f-8b2e-08deefdb5e1b |
| VA2110 | 应撤销用于访问注册表的执行权限 | 高 | 注册表扩展存储过程允许Microsoft SQL Server读取注册表中的写入和枚举值和键。 企业管理员使用它们来配置服务器。 此规则检查是否已撤销所有用户(dbo 除外)执行注册表扩展存储过程的权限。 |
SQL Managed Instance |
应限制对 SQL Server 访问注册表的执行权限 | b66a88e5-8c46-47f2-9107-5ed84da7270f |
| VA2113 | 只能向 SSIS 角色授予数据转换服务 (DTS) 权限 | 中型 | 数据转换服务 (DTS) 是一组对象和实用工具,它们允许对数据库自动执行提取、转换和加载操作。 这些对象是 DTS 包,其组件和实用工具称为 DTS 工具。 此规则检查是否仅向 SSIS 角色授予了使用 DTS 系统存储过程的权限,以及是否已撤销 PUBLIC 角色使用 DTS 系统存储过程的权限。 |
SQL Managed Instance |
仅应向 MSDB SQL 数据库中的 SSIS 角色授予数据转换服务 (DTS) 权限 | 0d9a8166-01b2-434c-9791-c589b119eea8 |
| VA2114 | 最小主体集应该是影响较大的固定服务器角色的成员 | 高 | SQL Server提供角色来帮助管理权限。 角色是对其他主体进行分组的安全主体。 服务器级角色的权限范围为服务器范围。 此规则检查最小主体集是否为固定服务器角色的成员。 |
SQL Managed Instance |
最小主体集应是 SQL Server 的固定服务器角色的成员 | d8cfa23e-9485-44a4-831e-757c71e48988 |
| VA2129 | 对已签名模块的更改应得到授权 | 高 | 可以使用证书或非对称密钥对存储过程、函数或触发器进行签名。 这适用于以下情况:无法通过所有权链接继承权限,或所有权链中断,例如动态 SQL。 此规则检查对已签名模块所做的更改,这可能表明存在恶意使用的情况。 |
SQL Database SQL Managed Instance |
对已签名模块的更改应获得 SQL 数据库的授权 | e058e189-97da-4c3b-8361-e7097a93131c |
| VA2130 | 跟踪有权访问数据库的所有用户 | 低 | 此检查跟踪有权访问数据库的所有用户。 确保已根据这些用户在组织中的当前角色对其进行了授权。 |
Azure Synapse |
跟踪有权访问 SQL 数据库的所有用户 | eeed5c32-daff-489c-8307-76035ee85274 |
| VA2201 | 应禁用具有常用名称的 SQL 登录名 | 高 | 此规则检查具有数据库所有者权限的帐户是否有常用名称。 将常用名称分配给具有数据库所有者权限的帐户会增加暴力攻击成功的可能性。 |
|
应为 SQL Server 禁用具有常用名称的 SQL 登录名 | 467115f4-5145-43a9-93a8-7dbfaa1eedc4 |
审核与日志记录
| 规则 ID | 规则标题 | 规则严重性 | 规则描述 | 平台 | 推荐标题 | 评估 ID |
|---|---|---|---|---|---|---|
| VA1045 | 应启用默认跟踪 | 中型 | 默认跟踪可确保数据库管理员在问题首次出现时即具有诊断该问题所需的日志数据,从而为数据库管理员提供了故障排除帮助。 此规则检查是否已启用默认跟踪。 |
SQL Managed Instance |
应为 SQL Server 启用默认跟踪 | b19610cf-e5f6-4490-83c0-132c9af68e66 |
| VA1091 | 将“登录审核”设置为跟踪登录时,应对成功和失败的登录尝试都启用审核(默认跟踪) | 低 | SQL Server登录审核配置使管理员能够跟踪登录到SQL Server实例的用户。 如果用户选择计数“登录审核”来跟踪登录到SQL Server实例的用户,则必须为成功和失败的登录尝试启用它。 |
|
当“登录审核”设置为跟踪 SQL Server 的登录名时,应同时启用对成功和失败登录尝试(默认跟踪)的审核 | 96dd0622-2d0d-49ad-9042-d92a228b0e1f |
| VA1093 | 错误日志的最大数量应为 12 个或更多 | 低 | 每个SQL Server错误日志都将包含自上次重启SQL Server以来或自上次回收错误日志以来发生的失败/错误的所有信息。 此规则检查错误日志的最大数量是否为 12 个或更多。 |
|
SQL Server 的错误日志的最大数目应为 12 或更多 | 31e24118-a540-4b40-bef1-952de1af23cb |
| VA1258 | 数据库所有者符合预期 | 高 | 数据库所有者可以在数据库上执行所有配置和维护活动,还可以删除SQL Server中的数据库。 跟踪数据库所有者对于避免某些主体拥有过多权限很重要。 创建一个基线,该基线定义数据库的预期数据库所有者。 此规则检查数据库所有者是否符合基线中的定义。 |
SQL Database Azure Synapse |
数据库所有者应与 SQL 数据库的预期一样 | f7fde937-a0b2-47a5-89ae-fcb475df5b82 |
| VA1264 | 应为成功和失败的登录尝试都启用审核 | 低 | SQL Server审核配置使管理员能够跟踪登录到他们负责SQL Server实例的用户。 此规则检查是否为成功和失败的登录尝试都启用了审核。 |
SQL Managed Instance |
应为 SQL Server 启用成功和失败登录尝试的审核 | 2b9eafde-304b-471b-8d9a-7a4966e40db8 |
| VA1265 | 应为包含 DB 身份验证的成功和失败登录尝试都启用审核 | 中型 | SQL Server审核配置使管理员能够跟踪用户日志记录,以SQL Server他们负责的实例。 此规则检查是否为包含 DB 身份验证的成功和失败登录尝试都启用了审核。 |
SQL Managed Instance |
应为 SQL 数据库启用成功和失败的登录尝试审核包含的数据库身份验证 | e0710b96-f76a-435f-8e0d-3a18703c19a7 |
| VA1281 | 用户定义角色的所有成员身份应符合预期 | 中型 | 用户定义的角色是由用户定义的安全主体,用于对主体进行分组,以便轻松管理权限。 监视这些角色对于避免拥有过多权限很重要。 创建一个基线,为每个用户定义角色定义预期的成员身份。 此规则检查用户定义角色的所有成员身份是否符合基线中的定义。 |
SQL Managed Instance SQL Database Azure Synapse |
用户定义角色的所有成员身份都应在 SQL 数据库中 | e8b826e1-d31b-4545-8a0c-8f640d4ad5d3 |
| VA1283 | 系统中至少应有 1 个活动审核 | 低 | 审核SQL Server Database Engine或单个数据库的实例涉及跟踪和记录Database Engine上发生的事件。 SQL Server Audit 对象收集要监视的服务器或数据库级作和作组的单个实例。 此规则检查系统中是否至少有一个活动审核。 |
SQL Managed Instance |
对于 SQL Server,系统中应至少有 1 个活动审核 | c4671054-a31b-4e7e-8393-c62381a933b9 |
| VA2061 | 应在服务器级别启用审核 | 高 | Azure SQL Database审核跟踪数据库事件,并将其写入Azure存储帐户中的审核日志。 审核可帮助你了解数据库活动,深入了解可能表明业务问题或疑似安全违规的偏差和异常,并帮助你满足合规性要求。 有关详细信息,请参阅 Azure SQL Auditing。 此规则检查是否已启用审核。 |
Azure Synapse |
应在 SQL Server 的服务器级别启用审核 | de1a511e-6ccd-4bf0-8d08-49363b1a1085 |
数据保护
| 规则 ID | 规则标题 | 规则严重性 | 规则描述 | 平台 | 推荐标题 | 评估 ID |
|---|---|---|---|---|---|---|
| VA1098 | 现有的所有 SSB 或 Mirroring 终结点都需要建立 AES 连接 | 高 | Service Broker 和 Mirroring 终结点支持各种加密算法,包括非加密算法。 此规则检查现有的所有终结点是否都需要进行 AES 加密。 |
|
SQL 数据库上任何现有镜像或 SSB 终结点都需要 AES 加密 | e2d0fab5-f6fd-4d2b-8725-5fd15099fd70 |
| VA1219 | 应启用透明数据加密 | 中型 | 透明数据加密 (TDE) 通过以下方式帮助保护数据库文件以避免信息泄露:对“静态”的数据库、相关备份和事务日志文件进行实时加密和解密,无需更改应用程序。 此规则检查是否对数据库启用了 TDE。 |
SQL Managed Instance SQL Database Azure Synapse |
应为 SQL 数据库启用透明数据加密 | aede6ed5-32a2-489f-94b1-85767847b595 |
| VA1220 | 应通过 TLS 保护使用 TDS 的数据库通信 | 高 | Microsoft SQL Server可以使用安全套接字层(SSL)或传输层安全性(TLS)来加密在SQL Server实例与客户端应用程序之间跨网络传输的数据。 此规则检查通过 TLS 加密与SQL Server的所有连接。 |
SQL Managed Instance |
应通过 SQL Server 的 TLS 保护使用 TDS 的数据库通信 | b13ff618-06ab-4cd4-a181-9d56eb6dc76a |
| VA1221 | 数据库加密对称密钥应使用 AES 算法 | 高 | SQL Server使用加密密钥来帮助保护存储在服务器数据库中的数据凭据和连接信息。 SQL Server有两种类型的密钥:对称密钥和非对称密钥。 此规则检查数据库加密对称密钥是否使用 AES 算法。 |
SQL Managed Instance SQL Database Azure Synapse |
数据库加密对称密钥应在 SQL 数据库中使用 AES 算法 | df777b52-0d5e-434b-953a-0285f83478c7 |
| VA1222 | 单元级加密密钥应使用 AES 算法 | 高 | 单元级加密 (CLE) 允许使用对称密钥和非对称密钥对数据进行加密。 此规则检查单元级加密对称密钥是否使用 AES 算法。 |
SQL Managed Instance |
Cell-Level 加密密钥应在 SQL 数据库中使用 AES 算法 | b3d7132d-1fe7-4408-91ae-dc3a188bfd26 |
| VA1223 | 证书密钥应使用至少 2048 位 | 高 | RSA 和其他加密算法使用证书密钥来保护数据。 这些密钥必须具有足够的长度才能保护用户数据。 此规则检查所有证书的密钥长度是否至少为 2048 位。 |
SQL Managed Instance SQL Database Azure Synapse |
证书密钥应至少为 SQL 数据库使用 2048 位 | 1a56a8c1-e013-49d0-8295-e60407730b94 |
| VA1224 | 非对称密钥的长度应至少为 2048 位 | 高 | 数据库非对称密钥用于许多加密算法中,这些密钥需要具有足够的长度才能保护加密数据。此规则检查存储在数据库中的所有非对称密钥的长度是否至少为 2048 位 |
SQL Database |
非对称密钥的长度应在 SQL 数据库中至少为 2048 位 | becd2bef-27ac-4d8b-8e2a-73dfbfc7a4f5 |
| VA1279 | 应为 TDS 启用强制加密 | 高 | 启用Database Engine强制加密选项时,无论是否选中“加密连接”选项(如 SSMS),都会加密客户端和服务器之间的所有通信。 此规则检查是否已启用“强制加密”选项。 |
|
应为 SQL Server 的 TDS 启用强制加密 | 5765385f-4da2-4a26-a89e-7cf66a14ad8d |
| VA2060 | 应在服务器级别启用 SQL 威胁检测 | 中型 | SQL 威胁检测提供了一个安全层,用于检测数据库中的潜在漏洞和异常活动,例如 SQL 注入攻击和异常行为模式。 检测到潜在威胁时,威胁检测会通过电子邮件和Microsoft Defender for Cloud发送可作的实时警报,其中包括针对特定威胁的明确调查和修正步骤。 有关详细信息,请参阅配置威胁检测。 此检查验证是否已启用 SQL 威胁检测 | SQL Managed Instance SQL Database Azure Synapse |
应在 SQL Server 级别启用 SQL 威胁检测 | 207ea640-5acf-49ad-92b4-8df60e793fef |
安装更新和修补
| 规则 ID | 规则标题 | 规则严重性 | 规则描述 | 平台 | 推荐标题 | 评估 ID |
|---|---|---|---|---|---|---|
| VA1018 | 应安装最新更新 | 高 | Microsoft为每个版本的SQL Server定期发布累积更新(CU)。 此规则通过传入字符串来执行来检查是否为正在使用的特定版本的SQL Server安装了最新的 CU。 此规则检查是否所有用户(dbo 除外)都无权执行 xp_cmdshell 扩展存储过程。 |
SQL Server 2017 SQL Server 2019 SQL Server 2022 |
应为 SQL Server 安装最新更新 | fb8ee986-4557-4bb6-9bf7-626abdaa1b72 |
| VA2128 | 低于 SQL Server 2012 的 SQL Server 版本不支持漏洞评估 | 高 | 若要在SQL Server上运行漏洞评估扫描,服务器需要升级到 SQL Server 2012 或更高版本,SQL Server 2008 R2 及更低版本不再受Microsoft支持。 有关详细信息,请参阅 |
SQL Managed Instance SQL Database Azure Synapse |
仅应在 2012 年 SQL Server 及更高版本上配置漏洞评估 | 82735d78-e25e-4dc1-bf02-11136003cd69 |
Surface面积减少
| 规则 ID | 规则标题 | 规则严重性 | 规则说明 | 平台 | 推荐标题 | 评估 ID |
|---|---|---|---|---|---|---|
| VA1022 | 应禁用即席分布式查询 | 中 | 即席分布式查询使用 OPENROWSET 和 OPENDATASOURCE 函数连接到使用 OLE DB 的远程数据源。 此规则检查是否已禁用即席分布式查询。 |
|
应为 SQL Server 禁用即席分布式查询 | 5ab112c3-4d3e-42b6-b6dc-562564052b65 |
| VA1023 | 应禁用 CLR | 高 | CLR 允许托管代码在Microsoft SQL Server环境中托管并运行。 此规则检查是否已禁用 CLR。 |
|
应为 SQL Server 禁用 CLR | 1c0d864f-aa29-4459-afa5-809f49380b3b |
| VA1026 | 应禁用 CLR | 中 | CLR 允许托管代码在Microsoft SQL Server环境中托管并运行。 CLR 严格安全性将 SAFE 和 EXTERNAL_ACCESS 程序集视为已标记为 UNSAFE,并要求所有程序集均通过证书或非对称密钥进行签名,且该证书或非对称密钥具有已在 master 数据库中获得 UNSAFE ASSEMBLY 权限的相应登录名。 此规则检查是否已禁用 CLR。 |
SQL Managed Instance |
应为 SQL Server 禁用 CLR | ee9b8a8c-2db6-4584-87a5-8567784b4733 |
| VA1027 | 应删除未跟踪的受信任程序集 | 高 | 标记为 UNSAFE 的程序集必须通过证书或非对称密钥进行签名,且该证书或非对称密钥具有已在 master 数据库中获得 UNSAFE ASSEMBLY 权限的相应登录名。 受信任的程序集可以绕过此要求。 |
SQL Managed Instance |
应为 SQL Server 删除未跟踪的受信任程序集 | 04cd2847-1ef5-4f97-be26-9907e3a4b08d |
| VA1044 | 除非特别需要,否则应禁用远程管理员连接 | 中 | 此规则检查是否禁用了远程专用管理连接(如果它们未用于群集)以减少攻击面。 SQL Server提供专用管理员连接(DAC)。 DAC 允许管理员访问正在运行的服务器以执行诊断函数或Transact-SQL语句,或者排查服务器上的问题,并在远程启用时成为攻击的有吸引力的目标。 |
SQL Managed Instance |
除非 SQL 数据库特别需要,否则应禁用远程管理员连接 | 5b979ba8-b33f-40a6-88f0-aa05f90fbf1f |
| VA1051 | 应在所有数据库上禁用AUTO_CLOSE | 中 | AUTO_CLOSE 选项指定在最后一个用户断开连接后,数据库是否正常关闭并释放资源。 尽管它有优点,但它可能会通过主动打开和关闭数据库来导致拒绝服务,因此禁用此功能非常重要。 此规则检查是否在当前数据库上禁用了此选项。 |
|
应为 SQL 数据库禁用AUTO_CLOSE | f5b406da-9b07-4ea5-931e-a15194a61fcf |
| VA1066 | 应删除未使用的 Service Broker 终结点 | 低 | Service Broker 为SQL Server提供队列和可靠的消息传送。 Service Broker 用于使用单个SQL Server实例的应用程序,以及跨多个实例分配工作的应用程序。 Service Broker 终结点提供用于传输安全性和消息转发的选项。 此规则枚举所有 Service Broker 终结点。 应删除未使用的终结点。 |
|
应为 SQL Server 删除未使用的 Service Broker 终结点 | 76052b85-52f4-4a0f-9f14-ad8e78426578 |
| VA1071 | 应禁用“扫描启动存储过程”选项 | 中 | 启用“扫描启动过程”时,SQL Server扫描并运行服务器上定义的所有自动运行存储过程。 如果启用此选项SQL Server扫描并运行服务器上定义的所有存储过程。 此规则检查是否已禁用此选项。 |
|
应为 SQL Server 禁用“扫描启动存储过程”选项 | 3f03bcc2-d66c-4b12-b3bc-406b2cfe3cd5 |
| VA1092 | SQL Server Browser 服务不应播发SQL Server实例 | 低 | SQL Server使用 SQL Server Browser 服务来枚举计算机上安装的Database Engine实例。 这使客户端应用程序能够浏览服务器并帮助客户端在同一台计算机上区分Database Engine的多个实例。 此规则检查是否隐藏了 SQL 实例。 |
|
sql Server SQL Server Browser 服务不应播发SQL Server实例 | 0fccb942-d1e9-47c7-87cd-c98bcfd8e339 |
| VA1102 | 应在除 MSDB 之外的所有数据库上禁用可信位 | 高 | TRUSTWORTHY 数据库属性用于指示SQL Server实例是否信任数据库及其内容。 如果启用此选项,则使用模拟上下文的数据库模块(例如,用户定义函数或存储过程)可以访问数据库外部的资源。 此规则验证是否在除 MSDB 以外的所有数据库上禁用了可信位。 |
SQL Managed Instance |
应在除 SQL 数据库的 MSDB 以外的所有数据库上禁用可信位 | 4711c18c-eac4-488d-a9dd-91e0286df063 |
| VA1143 | “dbo”用户不应用于正常服务作 | 中 | “dbo”或数据库所有者是一种用户帐户,该帐户拥有执行数据库中所有活动的暗示性权限。 sysadmin 固定服务器角色的成员将自动映射到 dbo。 此规则检查 dbo 是否不是唯一可以访问此数据库的帐户。 请注意,在新创建的干净数据库上,此规则将失败,直到创建其他角色为止。 |
SQL Managed Instance SQL Database Azure Synapse |
“dbo”用户不应用于 SQL 数据库中的正常服务作 | 211f976f-cac2-4e3d-8d79-744a85eedc92 |
| VA1144 | 模型数据库只能由“dbo”访问 | 中 | 模型数据库用作在SQL Server实例上创建的所有数据库的模板。 对模型数据库进行的修改(如数据库大小、恢复模式和其他数据库选项)将应用于以后创建的所有数据库。 此规则检查 dbo 是否是唯一可以访问模型数据库的帐户。 |
SQL Managed Instance |
只有“dbo”才有权访问 Model SQL 数据库 | 27f8f855-c834-4611-be7c-d8f443cf17ce |
| VA1230 | 应禁用 Filestream | 高 | FILESTREAM 通过将 varbinary (max) 二进制大型对象 (BLOB) 数据存储为文件系统中的文件,将 SQL Server Database Engine 与 NTFS 文件系统集成。 Transact-SQL语句可以插入、更新、查询、搜索和备份 FILESTREAM 数据。 在 SQL Server 上启用文件流会公开额外的 NTFS 流式处理 API,这会增加其攻击面,使其容易遭受恶意攻击。 此规则检查是否已禁用文件流。 |
|
应为 SQL Server 禁用文件流 | fe3db657-719e-4134-9de4-e9110e67d23f |
| VA1235 | 应禁用服务器配置“复制 XP” | 中 | 禁用弃用的服务器配置“复制 XPS”以限制攻击面。 这是仅限内部使用的配置设置。 |
SQL Managed Instance |
应为 SQL Server 禁用服务器配置“复制 XP” | 848680cd-73d9-4a5f-8f02-b58b32c00f96 |
| VA1244 | 应从 SQL Server 数据库中删除孤立用户 | 中 | 数据库用户存在于数据库上,但在 master 数据库中没有相应的登录名或作为外部资源(例如,Windows用户)称为孤立用户,它应被删除或重新映射到有效的登录名。 此规则检查是否有孤立用户。 |
SQL Managed Instance |
应从 SQL Server 数据库中删除孤立用户 | d2f665b3-3cb5-460e-8d52-eb92a57067aa |
| VA1245 | dbo 信息应在目标 DB 和 master 之间保持一致 | 高 | 任何数据库都存在与 dbo 标识有关的冗余信息:存储在数据库本身的元数据,以及存储在 master DB 中的元数据。 此规则检查目标 DB 与 master 之间的此信息是否一致。 |
SQL Managed Instance |
数据库中的数据库所有者信息应与 SQL 数据库的 master 数据库中相应的数据库所有者信息匹配 | ff38d4d1-f98b-4f49-b096-e40ad8898b01 |
| VA1247 | 不应有标记为自动启动的 SP | 高 | 当SQL Server配置为“扫描启动 procs”时,服务器将扫描主数据库以查找标记为自动启动的存储过程。 此规则检查是否有标记为自动启动的 SP。 |
|
不应将 SP 标记为 SQL Server 自动启动 | 7c009298-050f-4ec6-b9ec-2f7761ed031f |
| VA1256 | 不应在数据库中定义用户 CLR 程序集 | 高 | CLR 程序集可用于在SQL Server进程中执行任意代码。 此规则检查数据库中是否没有用户定义的 CLR 程序集。 |
SQL Managed Instance |
不应在 SQL 数据库中定义用户 CLR 程序集 | e34cd505-f157-4dce-84d8-5d38dfb2cb6f |
| VA1277 | 应启用 Polybase 网络加密 | 高 | PolyBase 是一种从 SQL Server 中访问和合并非关系数据和关系数据的技术。 Polybase 网络加密选项配置SQL Server,以在使用 Polybase 时加密控制和数据通道。 此规则验证是否已启用此选项。 |
|
应为 SQL 数据库启用 Polybase 网络加密 | 6ef039e5-8219-4d20-ab60-7f5c3bad95de |
| VA1278 | 创建外部密钥管理提供程序的基线 | 中 | SQL Server可扩展密钥管理(EKM)使第三方 EKM/硬件安全模块(HSM)供应商能够在SQL Server中注册其模块。 注册SQL Server用户可以使用存储在 EKM 模块上的加密密钥时,此规则将显示系统中正在使用的 EKM 提供程序列表。 |
SQL Managed Instance |
为 SQL Server 创建外部密钥管理提供程序的基线 | b8a39ba4-f129-4656-a089-27ff4c5361d6 |
| VA2062 | 数据库级防火墙规则不应授予过多的访问权限 | 高 | Azure SQL Database级防火墙通过阻止对数据库的所有访问来保护数据,直到指定哪些 IP 地址具有权限。 数据库级防火墙规则基于每个请求的起始 IP 地址授予对特定数据库的访问权限。 主数据库和用户数据库的数据库级防火墙规则只能通过Transact-SQL创建和管理(与服务器级防火墙规则不同,这些规则也可以使用Azure门户或 PowerShell 创建和管理)。 有关详细信息,请参阅 Azure SQL Database 和 Azure Synapse Analytics IP 防火墙规则。 此检查验证数据库级防火墙规则所授权的 IP 地址不能超过 255 个。 |
Azure Synapse |
数据库级防火墙规则不应为 SQL Server 授予过度访问权限 | 2caca086-d941-413f-90ef-d8a593c8b900 |
| VA2063 | 服务器级防火墙规则不应授予过度访问权限 | 高 | Azure SQL服务器级防火墙通过阻止对数据库的所有访问来保护服务器,直到指定哪些 IP 地址具有权限。 服务器级防火墙规则基于每个请求的起始 IP 地址授予对属于该服务器的所有数据库的访问权限。 只能通过Transact-SQL以及Azure门户或 PowerShell 创建和管理服务器级防火墙规则。 有关详细信息,请参阅 Azure SQL Database 和 Azure Synapse Analytics IP 防火墙规则。 此检查验证服务器级防火墙规则所授权的 IP 地址不能超过 255 个。 |
Azure Synapse |
服务器级防火墙规则不应为 SQL Server 授予过多的访问权限 | 0412d153-1963-4d9d-866b-5fe0c61c2a05 |
| VA2064 | 应至少跟踪和维护数据库级防火墙规则 | 高 | Azure SQL Database级防火墙通过阻止对数据库的所有访问来保护数据,直到指定哪些 IP 地址具有权限。 数据库级防火墙规则基于每个请求的起始 IP 地址授予对特定数据库的访问权限。 主数据库和用户数据库的数据库级防火墙规则只能通过Transact-SQL创建和管理(与服务器级防火墙规则不同,这些规则也可以使用Azure门户或 PowerShell 创建和管理)。 有关详细信息,请参阅 Azure SQL Database 和 Azure Synapse Analytics IP 防火墙规则。 此检查枚举所有数据库级防火墙规则,以便可以识别并处理对其所做的任何更改。 |
Azure Synapse |
应至少跟踪和维护 SQL Server 的数据库级防火墙规则 | a0f95121-3aa8-40da-a803-d7dda3e53dee |
| VA2065 | 应至少跟踪和维护服务器级防火墙规则 | 高 | Azure SQL服务器级防火墙通过阻止对数据库的所有访问来保护数据,直到指定哪些 IP 地址具有权限。 服务器级防火墙规则基于每个请求的起始 IP 地址授予对属于该服务器的所有数据库的访问权限。 可以通过Transact-SQL以及Azure门户或 PowerShell 创建和管理服务器级防火墙规则。 有关详细信息,请参阅 Azure SQL Database 和 Azure Synapse Analytics IP 防火墙规则。 此检查枚举所有服务器级防火墙规则,以便可以识别并处理对其所做的任何更改。 |
Azure Synapse |
应在 SQL Server 上至少跟踪和维护服务器级防火墙规则 | 8bde1a6b-a583-4a91-b1b5-0366e605cdf4 |
| VA2111 | 应删除示例数据库 | 低 | Microsoft SQL Server随附了多个示例数据库。 此规则检查是否已删除示例数据库。 |
SQL Managed Instance |
应删除 SQL Server 的示例数据库 | aca36760-8cab-4b04-84d8-9826757bb3ca |
| VA2120 | 应禁用可能影响安全性的功能 | 高 | SQL Server能够提供各种功能和服务。 某些默认提供的功能和服务可能是不必要的,启用它们可能会对系统的安全性产生不利影响。 此规则检查是否已禁用这些功能。 |
SQL Managed Instance |
应为 SQL Server 禁用可能影响安全性的功能 | 611c613b-cb84-4e67-8bb3-1e9dc43d7783 |
| VA2121 | 应禁用“OLE 自动化过程”功能 | 高 | SQL Server能够提供各种功能和服务。 某些默认提供的功能和服务可能是不必要的,启用它们可能会对系统的安全性产生不利影响。 OLE 自动化过程选项控制是否可以在Transact-SQL批处理中实例化 OLE 自动化对象。 这些是扩展存储过程,使SQL Server用户能够执行SQL Server外部的函数。 不管它有何优点,但它可能会被用于漏洞攻击,被认为是一种在目标计算机上植入文件的常用机制。 建议使用 PowerShell 代替此工具。 此规则检查是否已禁用“OLE 自动化过程”功能。 |
SQL Managed Instance |
应为 SQL Server 禁用“OLE 自动化过程”功能 | eaafd365-6eb2-4e02-90b4-43e0f0a86638 |
| VA2122 | 应禁用“用户选项”功能 | 中 | SQL Server能够提供各种功能和服务。 某些默认提供的功能和服务可能是不必要的,启用它们可能会对系统的安全性产生不利影响。 用户选项指定了适用于所有用户的全局默认值。 将建立一个用户工作会话期间使用的默认查询处理选项的列表。 用户选项允许你更改 SET 选项的默认值(如果服务器的默认设置不合适)。 此规则检查是否已禁用“用户选项”功能。 |
SQL Managed Instance |
应为 SQL Server 禁用“用户选项”功能 | 927e9d4f-3f7c-495c-9d69-05cd47ee0369 |
| VA2126 | 如果需要,应禁用可能影响安全性的扩展性功能 | 中 | SQL Server提供各种功能和服务。 某些默认提供的功能和服务可能是不必要的,启用它们可能会对系统的安全性产生不利影响。 此规则检查是否禁用了允许将数据提取到外部数据源和允许使用某些远程语言扩展来执行脚本的配置。 |
|
如果 SQL Server 不需要,则应禁用可能影响安全性的扩展性功能 | 199a4141-7a0f-4d06-8eac-12431a6655ea |
删除的规则
| 规则 ID | 规则标题 |
|---|---|
| VA1021 | 应删除全局临时存储过程 |
| VA1024 | 应当启用 C2 审核模式 |
| VA1069 | 应撤销非系统管理员从系统表和视图中进行选择的权限 |
| VA1090 | 确保所有政府现成的 (GOTS) 和自定义的存储过程都已加密 |
| VA1103 | 仅使用具有 SAFE_ACCESS 权限的 CLR |
| VA1229 | 注册表和SQL Server配置中的文件流设置应匹配 |
| VA1231 | 应禁用文件流 (SQL) |
| VA1234 | 应启用通用标准设置 |
| VA1252 | 通过服务器审核规范审核和集中管理的事件列表。 |
| VA1253 | 通过服务器审核规范审核和集中管理的 DB 范围事件的列表 |
| VA1263 | 列出系统中的所有活动审核 |
| VA1266 | 应对所有 SQL 登录名设置“MUST_CHANGE”选项 |
| VA1276 | 应禁用代理 XPS 功能 |
| VA1286 | 不应直接向主体(OBJECT 或 COLUMN)授予数据库权限 |
| VA2000 | 应向最小主体集授予具有重大影响的数据库范围权限 |
| VA2001 | 应向最小主体集授予对对象或列具有重大影响的数据库范围权限 |
| VA2002 | 应向最小主体集授予对各种安全对象具有重大影响的数据库范围权限 |
| VA2010 | 应向最小主体集授予具有中等影响的数据库范围权限 |
| VA2021 | 应向最小主体集授予对对象或列的 ALTER 数据库范围权限 |
| VA2022 | 应向最小主体集授予对各种安全对象的 ALTER 数据库范围权限 |
| VA2030 | 应向最小主体集授予 SELECT 或 EXECUTE 数据库范围权限 |
| VA2031 | 应向最小主体集授予 SELECT 数据库范围权限 |
| VA2032 | 应向最小主体集授予对架构的 SELECT 或 EXECUTE 数据库范围权限 |
| VA2034 | 应向最小主体集授予对 XML 架构集合的 EXECUTE 数据库范围权限 |
| VA2040 | 应向最小主体集授予影响较小的数据库范围权限 |
| VA2041 | 应向最小主体集授予对对象或列影响较小的数据库范围权限 |
| VA2042 | 应向最小主体集授予对架构影响较小的数据库范围权限 |
| VA2050 | 应向最小主体集授予 VIEW DEFINITION 数据库范围权限 |
| VA2051 | 应向最小主体集授予对对象或列的 VIEW DEFINITION 数据库范围权限 |
| VA2052 | 应向最小主体集授予对各种安全对象的 VIEW DEFINITION 数据库范围权限 |
| VA2100 | 应向最小主体集授予具有重大影响的服务器范围权限 |
| VA2101 | 应向最小主体集授予具有中等影响的服务器范围权限 |
| VA2102 | 应向最小主体集授予影响较小的服务器范围权限 |
| VA2104 | 应撤销 PUBLIC 对扩展存储过程的执行权限 |
| VA2105 | 不应轻易猜到登录密码 |
| VA2112 | 应撤销 PUBLIC 对数据转换服务 (DTS) 的权限 |
| VA2115 | 最小主体集应该是具有中等影响的固定服务器角色的成员 |
| VA2123 | 应禁用“远程访问”功能 |
| VA2127 | 应禁用“外部脚本”功能 |