本文使用Azure策略来检查Azure SQL数据库与备份保留期的一致性。
简介
Azure SQL数据库提供基于DTU和vCores的定价模式。这些服务层级主要取决于业务连续性、存储和性能要求。在管理数据库服务中,Azure会自动管理数据库备份,以便在时间点上进行恢复。这些数据库备份根据其服务层级有不同的最大保留期。
-
基本服务层:7天
-
标准和高级服务层:35天
-
注:Azure SQL数据库的所有服务层的默认备份保留期为7天
例如,在我的实验室环境中,Azure数据库是在标准S0定价层。它被配置为默认的备份保留。要验证配置的备份保留,请进入Azure服务器配置,点击备份。
如下图所示,PITR(Point-In-Time-Recovery)是7天的。
要修改这个配置,选择数据库和配置的策略。你可以移动滑块,将PITR值增加到35天。同样,如果你不想为环境(如开发数据库)恢复备份,你可以将PITR减少到最少1天。

假设你有一个大型的Azure数据库基础设施。你也给了特定用户数据库部署的权限。作为一个数据库管理员,你要求PITR值应该是35天,而不是默认的7天期限。
本文指导你创建一个自定义策略,实施它,并补救问题,使数据库完全符合业务规则或配置。
要配置自定义策略定义,请在Azure门户中搜索策略,并导航到定义。
点击策略定义来定义一个自定义策略。在新的策略定义中,输入以下细节。
- 定义位置: 在定义位置中,点击eclipse并选择Azure订阅。
- 名称: 输入自定义策略定义的显示名称
- 说明: 这是一个可选字段。你可以用这个字段来描述策略定义和要求
- 类别: 这是Azure策略的类别,可以帮助你将策略分组。例如,你可以在SQL类别中找到属于Azure SQL数据库的所有相关策略。你可以选择创建一个新类别或现有类别。
- 政策规则:在政策规则中,我们定义了JSON政策文件来评估Azure资源。
在本文中,我们使用下面的JSON脚本。你可以注意到在这个策略脚本中,指定的保留期是35天。假设你想配置一个默认备份保留期为7天的策略,请将该值从35天修改为7天。
{
“properties”: {
“displayName”: “Azure PITR configration for 35 days”,
“policyType”: “Custom”,
“mode”: “Indexed”,
“description”: “This policy checks Azure SQL Databases for 35 days backup retention period. “,
“metadata”: {
“version”: “1.1.0”,
“category”: “SQL”,
“createdBy”: “5623789b-3072-41a7-8b9b-74d388241482”,
“createdOn”: “2021-05-19T11:57:08.9261396Z”,
“updatedBy”: null,
“updatedOn”: null
},
“parameters”: {
“effect”: {
“type”: “String”,
“metadata”: {
“displayName”: “Effect”,
“description”: “Enable or disable the execution of the policy.”
},
“allowedValues”: [
“DeployIfNotExists”,
“Disabled”
],
“defaultValue”: “DeployIfNotExists”
},
“retentionDays”: {
“type”: “String”,
“metadata”: {
“displayName”: “Retention Days”,
“description”: “Set the number of Backup Retention Days.”
},
“defaultValue”: “35”
}
},
“policyRule”: {
“if”: {
“field”: “type”,
“equals”: “Microsoft.Sql/servers/databases”
},
“then”: {
“effect”: “[parameters(‘effect’)]”,
“details”: {
“type”: “Microsoft.Sql/servers/databases/backupShortTermRetentionPolicies”,
“name”: “default”,
“roleDefinitionIds”: [
“/providers/Microsoft.Authorization/roleDefinitions/9b7fa17d-e63e-47b0-bb0a-15c516ac86ec”
],
“existenceCondition”: {
“field”: “Microsoft.Sql/servers/databases/backupShortTermRetentionPolicies/retentionDays”,
“equals”: “[parameters(‘retentionDays’)]”
},
“deployment”: {
“properties”: {
“mode”: “incremental”,
“template”: {
“$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
“contentVersion”: “1.0.0.0”,
“parameters”: {
“serverName”: {
“type”: “string”
},
“shortTermRetention”: {
“type”: “string”
}
},
“resources”: [
{
“name”: “[concat(parameters(‘serverName’),’/default’)]”,
“type”: “Microsoft.Sql/servers/databases/backupShortTermRetentionPolicies”,
“apiVersion”: “2017-10-01-preview”,
“properties”: {
“retentionDays”: “[parameters(‘shortTermRetention’)]”
}
}
]
},
“parameters”: {
“serverName”: {
“value”: “[field(‘fullname’)]”
},
“shortTermRetention”: {
“value”: “[parameters(‘retentionDays’)]”
}
}
}
}
}
}
}
},
“id”: “/subscriptions/c6eb5552-7748-4d57-82bb-4c52c1c8f87e/providers/Microsoft.Authorization/policyDefinitions/f5d5c854-5a1c-4521-ab9d-ec2d82ccbc1d”,
“type”: “Microsoft.Authorization/policyDefinitions”,
“name”: “f5d5c854-5a1c-4521-ab9d-ec2d82ccbc1d”
}
保存策略定义,它有以下属性。
- 政策名称:Azure PITR配置为35天
- 政策类型:自定义
- 定义类型:政策:政策
- 类别:SQL
为Azure SQL数据库指定Azure自定义策略
在上一节中,我们为Azure SQL数据库实现了35天的验证PITR配置的Azure策略。实施后,我们需要将此策略分配给Azure资源,以检查其合规性。
在Azure策略仪表板上,点击分配策略。
在分配策略页面上,在基本页面上输入以下信息。
-
范围:选择Azure订阅
-
排除:如果你想从策略分配中排除任何资源,你可以选择这些资源。 假设你有一个Azure SQL数据库,由于特殊原因需要7天的PITR。因此,排除该资源,这样你就能符合其余Azure数据库的要求了
-
政策定义:在这个策略定义中,我们使用之前定义的自定义策略。你可以选择自定义类型来快速查找政策
-
政策执行:已启用
-
指派者:你可以输入政策受让人或所有者名称
-
参数: 参数页定义了政策效果和保留天数。这里,我们指定35天作为保留期
-
补救:Azure补救任务可以更新Azure资源以符合部署的策略。例如,如果Azure SQL数据库没有35天的保留期,补救任务就会修改数据库配置以符合规定。点击 - 创建一个补救任务
-
它根据策略中的角色定义,使用SQL DB贡献者角色。该角色负责管理Azure SQL Databases
- 注意:SQL DB角色不能修改SQL服务器(实例)级别的配置。
-
不符合规定的消息。输入用户在政策结果为不符合规定时得到的信息。
在最后一节,仔细审查所有的策略分配。

单击 "创建"。在对Azure SQL数据库进行策略分配时,你会在通知区得到以下消息。

检查Azure PITR配置的政策合规性
要检查Azure PITR配置的政策合规性,请导航到Azure政策仪表板。如下图所示,我的实验室环境数据库是不符合规定的。
点击政策名称,就会得到详细的信息,如资源名称、范围、父资源、合规状态和不合规信息。
在策略分配过程中,我们也配置了补救任务。补救任务需要几分钟时间来进行配置修改。如下图所示,它的状态是评估中。
评估结束后,状态变为正在进行。
打开补救任务的属性以获得细节。如下图所示,Azure SQL数据库的策略修复是成功的。但是,对于主数据库来说,它是失败的。
点击主数据库的部署ID,了解失败原因。如下图所示,修改功能对选定的(主)数据库不可用,因为你不能对Azure数据库进行修改。
你可以验证Azure数据库的备份PITR值。如下图所示,它被修改为35天。
在Azure策略仪表板中,修复任务成功后,该策略显示为符合要求。
点击Azure策略,检查各个资源的合规性。如果你有多个Azure数据库,你可以检查单个资源的状态。
总结
本文探讨了用于验证Azure SQL数据库的PITR配置的自定义Azure策略。你可以用它来检查Azure数据库与政策配置的一致性状态。你也可以配置补救任务来改变Azure数据库的配置,并将它们的状态从不符合要求改为符合要求。它还可以确保你有足够的PITR配置,保护你免受意外的数据损失或问题。




















