你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

管理 Azure SQL 数据库中的漏洞发现

Microsoft Defender for Cloud 为 Azure SQL 数据库提供了漏洞评估。 漏洞评估会扫描数据库中的软件漏洞,并提供结果列表。 你可以使用结果修正软件漏洞并禁用结果。

先决条件

在继续操作之前,请确保你知道使用的是快速配置还是经典配置

若要查看正在使用的配置,请执行以下操作:

  1. Azure 门户中打开 Azure SQL 数据库、SQL 托管实例数据库或 Azure Synapse 中的特定资源。
  2. 在“安全性”标题下,选择 Defender for Cloud 。
  3. 在“启用状态”中,选择“配置”以打开整个服务器或托管实例的 Microsoft Defender for SQL 设置窗格。

如果漏洞设置显示用于配置存储帐户的选项,则你使用的是经典配置。 如果不是,则使用的是快速配置。

快速配置

查看扫描历史记录

选择漏洞评估窗格中的“扫描历史记录”,查看以前对此数据库运行的所有扫描的历史记录。

如果快速配置与以前的扫描相同,则不会存储扫描结果。 扫描历史记录中显示的扫描时间是上次扫描结果更改的时间。

禁用 Microsoft Defender for Cloud 的特定发现(预览)

如果组织需要忽略发现结果,而不是修正漏洞,则可以禁用发现结果。 禁用发现结果不会影响安全分数,也不会产生有害的噪音。 可以在扫描结果的“不适用”部分看到禁用的发现结果。

当发现结果与在禁用规则中定义的条件相匹配时,它不会显示在发现结果列表中。 典型方案可能包括:

  • 禁用严重性为中等或更低级别的发现结果
  • 禁用不可修补的发现结果
  • 禁用与定义的范围无关的基准的发现结果

重要

若要禁用特定发现结果,你需要拥有在 Azure Policy 中编辑策略的权限。 若要了解详细信息,请参阅 Azure Policy 中的 Azure RBAC 权限。

若要创建规则,请执行以下操作:

  1. 在“应修正关于计算机上 SQL Server 的漏洞评估结果”的建议详细信息页中,选择“禁用规则” 。

  2. 选择相关范围。

  3. 定义你的条件。 可以使用以下任一条件:

    • 发现结果 ID
    • 严重性
    • 基准
  4. 针对在计算机中的 SQL Server 上检测到的漏洞评估结果创建禁用规则

  5. 选择“应用规则”。 更改最多可能需要 24 小时才能生效。

  6. 若要查看、替代或删除规则,请执行以下操作:

    1. 选择“禁用规则”。
    2. 在范围列表中,具有有效规则的订阅显示为“已应用规则”。
    3. 若要查看或删除规则,请选择省略号菜单(“...”)。

使用 Azure 逻辑应用配置电子邮件通知

若要接收数据库漏洞评估状态的定期更新,可以使用可自定义的 Azure 逻辑应用模板

使用模板可以:

  • 选择电子邮件报告的时间。
  • 包含禁用的规则的漏洞评估状态具有一致视图。
  • 发送 Azure SQL 服务器和 SQL VM 的报告。
  • 自定义报告结构和外观,以符合组织标准。

以编程方式管理漏洞评估

具有以下功能的最新 REST API 版本支持快速配置:

说明 作用域 API
基线批量操作 系统数据库 SQL 漏洞评估基线
SQL 漏洞评估基线
基线批量操作 用户数据库 数据库 SQL 漏洞评估基线
单规则基线操作 用户数据库 数据库 SQL 漏洞评估规则基线
单规则基线操作 系统数据库 SQL 漏洞评估规则基线
SQL 漏洞评估规则基线
单个扫描结果 用户数据库 数据库 SQL 漏洞评估扫描结果
单个扫描结果 系统数据库 SQL 漏洞评估扫描结果
扫描详细信息(摘要) 用户数据库 数据库 SQL 漏洞评估扫描
扫描详细信息(摘要) 系统数据库 SQL 漏洞评估扫描
执行手动扫描 用户数据库 数据库 SQL 漏洞评估执行扫描
执行手动扫描 系统数据库 SQL 漏洞评估执行扫描
VA 设置(快速配置仅支持 GET) 用户数据库 数据库 SQL 漏洞评估设置
VA 设置操作 服务器 SQL 漏洞评估设置
SQL 漏洞评估

使用 Azure 资源管理器模板

使用以下 ARM 模板创建新的 Azure SQL 逻辑服务器,其中包含 SQL 漏洞评估的快速配置。

若要使用 Azure 资源管理器模板配置漏洞评估基线,请使用 Microsoft.Sql/servers/databases/sqlVulnerabilityAssessments/baselines 类型。 在添加基线之前,确保已启用 vulnerabilityAssessments

下面是有关如何使用 ARM 模板设置基线的几个示例:

  • 基于最新扫描结果设置批处理基线:

    {
        "type": "Microsoft.Sql/servers/databases/sqlVulnerabilityAssessments/baselines",
        "apiVersion": "2022-02-01-preview",
        "name": "[concat(parameters('serverName'),'/', parameters('databaseName') , '/default/default')]",
        "properties": {
            "latestScan": true
            }
    }
    
  • 基于特定结果设置批处理基线:

    {
        "type": "Microsoft.Sql/servers/databases/sqlVulnerabilityAssessments/baselines",
        "apiVersion": "2022-02-01-preview",
        "name": "[concat(parameters('serverName'),'/', parameters('databaseName') , '/default/default')]",
        "properties": {
            "latestScan": false,
            "results": {
            "VA2065": [
                [
                     "FirewallRuleName3",
                         "62.92.15.67",
                         "62.92.15.67"
                ],
                [
                     "FirewallRuleName4",
                         "62.92.15.68",
                         "62.92.15.68"
                ]
            ],
            "VA2130": [
                [
                     "dbo"
                ]
            ]
         }
      }
    }
    
  • 为特定规则设置基线:

    {
        "type": "Microsoft.Sql/servers/databases/sqlVulnerabilityAssessments/baselines/rules",
        "apiVersion": "2022-02-01-preview",
        "name": "[concat(parameters('serverName'),'/', parameters('databaseName') , '/default/default/VA1143')]",
        "properties": {
        "latestScan": false,
        "results": [
            [ "True" ]
            ]
        }
    }
    
  • 基于最新扫描结果在 master 数据库上设置批处理基线:

    {
        "type": "Microsoft.Sql/servers/databases/sqlVulnerabilityAssessments/baselines",
        "apiVersion": "2022-02-01-preview",
        "name": "[concat(parameters('serverName'),'/master/default/default')]",
        "properties": {
            "latestScan": true
            }
    }
    

使用 PowerShell

PowerShell cmdlet 不支持快速配置,但可以使用 PowerShell 并使用 REST API 调用最新的漏洞评估功能,例如:

使用 Azure CLI

使用 Azure CLI 调用快速配置。

疑难解答

还原回经典配置

若要将 Azure SQL 数据库从快速漏洞评估配置更改为经典配置:

  1. 从 Azure 门户禁用 Defender for Azure SQL 计划。

  2. 使用 PowerShell 通过经典体验重新配置:

    Update-AzSqlServerAdvancedThreatProtectionSetting `
                -ResourceGroupName "demo-rg" `
                -ServerName "dbsrv1" `
                -Enable 1
    Update-AzSqlServerVulnerabilityAssessmentSetting `
                -ResourceGroupName "demo-rg" `
                -ServerName "dbsrv1" `
                -StorageAccountName "mystorage" `
                -RecurringScansInterval Weekly `
                -ScanResultsContainerName "vulnerability-assessment"
    

    你可能需要根据《将漏洞评估扫描结果存储在可从防火墙和 VNet 后面访问的存储帐户中》来调整 Update-AzSqlServerVulnerabilityAssessmentSetting

错误

“漏洞评估在此服务器或其基础数据库的一个不兼容版本上启用”

可能的原因:

  • 由于服务器策略错误,切换到快速配置失败。

    解决方案:请重试以启用快速配置。 如果问题仍然存在,请尝试在 Azure SQL 资源中禁用 Microsoft Defender for SQL,选择“保存”,再次启用 Microsoft Defender for SQL,然后选择“保存”。

  • 由于数据库策略错误,切换到快速配置失败。 数据库策略在 Defender for SQL 漏洞评估的 Azure 门户中不可见,因此我们在切换到快速配置过程中的验证阶段对其进行检查。

    解决方案:禁用相关服务器的所有数据库策略,然后再次尝试切换到快速配置。

  • 请考虑使用提供的 PowerShell 脚本来获取帮助。

经典配置

查看扫描历史记录

选择漏洞评估窗格中的“扫描历史记录”,查看以前对此数据库运行的所有扫描的历史记录。

禁用 Microsoft Defender for Cloud 的特定发现(预览)

如果组织需要忽略发现结果,而不是修正漏洞,则可以选择禁用发现结果。 禁用发现结果不会影响安全分数,也不会产生有害的噪音。

当发现结果与在禁用规则中定义的条件相匹配时,它不会显示在发现结果列表中。 典型方案可能包括:

  • 禁用严重性为中等或更低级别的发现结果
  • 禁用不可修补的发现结果
  • 禁用与定义的范围无关的基准的发现结果

重要

  • 若要禁用特定发现结果,你需要拥有在 Azure Policy 中编辑策略的权限。 若要了解详细信息,请参阅 Azure Policy 中的 Azure RBAC 权限
  • 禁用的结果仍将包含在每周 SQL 漏洞评估电子邮件报告中。
  • 禁用的规则显示在扫描结果的“不适用”部分中。

若要创建规则,请执行以下操作:

  1. 在“应修正关于计算机上 SQL Server 的漏洞评估结果”的建议详细信息页中,选择“禁用规则” 。

  2. 选择相关范围。

  3. 定义你的条件。 可以使用以下任一条件:

    • 发现结果 ID
    • 严重性
    • 基准

    针对在计算机中的 SQL Server 上检测到的漏洞评估结果创建禁用规则的屏幕截图。

  4. 选择“应用规则”。 更改最多可能需要 24 小时才能生效。

  5. 若要查看、替代或删除规则,请执行以下操作:

    1. 选择“禁用规则”。

    2. 在范围列表中,具有有效规则的订阅显示为“已应用规则”。

      修改或删除现有规则的屏幕截图。

    3. 若要查看或删除规则,请选择省略号菜单(“...”)。

以编程方式管理漏洞评估

Azure PowerShell

注意

本文使用 Azure Az PowerShell 模块,这是与 Azure 交互时推荐使用的 PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

重要

仍然支持 PowerShell Azure 资源管理器模块,但是所有未来的开发都是针对 Az.Sql 模块。 若要了解这些 cmdlet,请参阅 AzureRM.Sql。 Az 模块和 AzureRm 模块中的命令参数大体上是相同的。

可以使用 Azure PowerShell cmdlet 以编程方式管理漏洞评估。 受支持的 cmdlet 如下:

Cmdlet 名称(链接) 说明
Clear-AzSqlDatabaseVulnerabilityAssessmentRuleBaseline 清除漏洞评估规则基线。
在使用此 cmdlet 清除基线之前请先设置基线。
Clear-AzSqlDatabaseVulnerabilityAssessmentSetting 清除数据库的漏洞评估设置。
Clear-AzSqlInstanceDatabaseVulnerabilityAssessmentRuleBaseline 清除托管数据库的漏洞评估规则基线。
在使用此 cmdlet 清除基线之前请先设置基线。
Clear-AzSqlInstanceDatabaseVulnerabilityAssessmentSetting 清除托管数据库的漏洞评估设置。
Clear-AzSqlInstanceVulnerabilityAssessmentSetting 清除托管实例的漏洞评估设置。
Convert-AzSqlDatabaseVulnerabilityAssessmentScan 将数据库的漏洞评估扫描结果转换为 Excel 文件(导出)。
Convert-AzSqlInstanceDatabaseVulnerabilityAssessmentScan 将托管数据库的漏洞评估扫描结果转换为 Excel 文件(导出)。
Get-AzSqlDatabaseVulnerabilityAssessmentRuleBaseline 获取给定规则的数据库漏洞评估规则基线。
Get-AzSqlInstanceDatabaseVulnerabilityAssessmentRuleBaseline 获取给定规则的托管数据库漏洞评估规则基线。
Get-AzSqlDatabaseVulnerabilityAssessmentScanRecord 获取与给定数据库关联的所有漏洞评估扫描记录。
Get-AzSqlInstanceDatabaseVulnerabilityAssessmentScanRecord 获取与给定托管数据库关联的所有漏洞评估扫描记录。
Get-AzSqlDatabaseVulnerabilityAssessmentSetting 返回数据库的漏洞评估设置。
Get-AzSqlInstanceDatabaseVulnerabilityAssessmentSetting 返回托管数据库的漏洞评估设置。
Set-AzSqlDatabaseVulnerabilityAssessmentRuleBaseline 设置漏洞评估规则基线。
Set-AzSqlInstanceDatabaseVulnerabilityAssessmentRuleBaseline 设置托管数据库的漏洞评估规则基线。
Start-AzSqlDatabaseVulnerabilityAssessmentScan 触发对于数据库的漏洞评估扫描的启动。
Start-AzSqlInstanceDatabaseVulnerabilityAssessmentScan 触发对于托管数据库的漏洞评估扫描的启动。
Update-AzSqlDatabaseVulnerabilityAssessmentSetting 更新数据库的漏洞评估设置。
Update-AzSqlInstanceDatabaseVulnerabilityAssessmentSetting 更新托管数据库的漏洞评估设置。
Update-AzSqlInstanceVulnerabilityAssessmentSetting 更新托管实例的漏洞评估设置。

有关脚本示例,请参阅 Azure SQL 漏洞评估 PowerShell 支持

Azure CLI

重要

以下 Azure CLI 命令适用于在 VM 或本地计算机上托管的 SQL 数据库。 有关涉及 Azure SQL 数据库的漏洞评估,请参阅“Azure 门户”或“PowerShell”部分。

可以使用 Azure CLI 以编程方式管理漏洞评估。 支持的命令为:

链接形式的命令名称 说明
az security va sql baseline delete 删除 SQL 漏洞评估规则基线。
az security va sql baseline list 查看所有规则的 SQL 漏洞评估基线。
az security va sql baseline set 获取 SQL 漏洞评估基线。 替换当前基线。
az security va sql baseline show 查看 SQL 漏洞评估规则基线。
az security va sql baseline update 更新 SQL 漏洞评估规则基线。 替换当前规则基线。
az security va sql results list 查看所有 SQL 漏洞评估扫描结果。
az security va sql results show 查看 SQL 漏洞评估扫描结果。
az security va sql scans list 列出所有 SQL 漏洞评估扫描摘要。
az security va sql scans show 查看 SQL 漏洞评估扫描摘要。

资源管理器模板

若要使用 Azure 资源管理器模板配置漏洞评估基线,请使用 Microsoft.Sql/servers/databases/vulnerabilityAssessments/rules/baselines 类型。

在添加基线之前,请确保已启用 vulnerabilityAssessments

下面是一个示例,演示了如何将 master 数据库的基线规则 VA2065 和 user 数据库的基线规则 VA1143 定义为资源管理器模板中的资源:

   "resources": [
      {
         "type": "Microsoft.Sql/servers/databases/vulnerabilityAapiVersion": "2018-06-01",
         "name": "[concat(parameters('server_name'),'/', parameters('database_name') , '/default/VA2065/master')]",
         "properties": {
            "baselineResults": [
               {
                  "result": [
                     "FirewallRuleName3",
                     "StartIpAddress",
                     "EndIpAddress"
                  ]
               },
               {
                  "result": [
                     "FirewallRuleName4",
                     "62.92.15.68",
                     "62.92.15.68"
                  ]
               }
            ]
         },
         "type": "Microsoft.Sql/servers/databases/vulnerabilityAapiVersion": "2018-06-01",
         "name": "[concat(parameters('server_name'),'/', parameters('database_name'), '/default/VA2130/Default')]",
         "dependsOn": [
            "[resourceId('Microsoft.Sql/servers/vulnerabilityAssessments', parameters('server_name'), 'Default')]"
         ],
         "properties": {
            "baselineResults": [
               {
                  "result": [
                     "dbo"
                  ]
               }
            ]
         }
      }
   ]

对于 master 数据库和 user 数据库,资源名称的定义方式不同:

  • Master 数据库 - "name": "[concat(parameters('server_name'),'/', parameters('database_name'), '/default/VA2065/master')]",
  • 用户数据库 - "name": "[concat(parameters('server_name'),'/', parameters('database_name'), '/default/VA2065/default')]",

若要将布尔类型处理为 true/false,请使用二进制输入(例如 "1"/"0")设置基线结果。

   {
      "type": "Microsoft.Sql/servers/databases/vulnerabilityapiVersion": "2018-06-01",
      "name": "[concat(parameters('server_name'),'/', parameters('database_name'), '/default/VA1143/Default')]",

      "dependsOn": [
         "[resourceId('Microsoft.Sql/servers/vulnerabilityAssessments', parameters('server_name'), 'Default')]"
      ],

      "properties": {
         "baselineResults": [
            {
               "result": [
                  "1"
               ]
            }
         ]
      }

   }