如何通过PowerShell/Azure CLI启用Microsoft Defender for SQL及漏洞评估
Microsoft Defender for SQL 组件独立性及自动化启用命令
组件独立性说明
高级威胁防护(ATP)和SQL漏洞评估(VA)是Microsoft Defender for SQL的两个独立核心组件:
- ATP:实时检测数据库异常访问、SQL注入等威胁行为,提供告警与响应建议。
- VA:定期扫描数据库配置、权限、数据暴露等风险点,生成合规报告,依赖存储账户保存扫描结果。
二者需分别配置,无自动联动启用逻辑。
PowerShell 命令(支持参数化,适配流水线)
1. 启用高级威胁防护(ATP)
param( [Parameter(Mandatory=$true)] [string]$ResourceGroupName, [Parameter(Mandatory=$true)] [string]$SqlServerName ) Set-AzSqlServerAdvancedThreatProtectionPolicy -ResourceGroupName $ResourceGroupName -ServerName $SqlServerName -Enabled $true
2. 配置SQL漏洞评估(VA)
param( [Parameter(Mandatory=$true)] [string]$ResourceGroupName, [Parameter(Mandatory=$true)] [string]$SqlServerName, [Parameter(Mandatory=$true)] [string]$StorageAccountName, [Parameter(Mandatory=$true)] [string]$StorageAccountResourceGroupName ) # 获取存储容器SAS令牌(有效期1年) $storageAccount = Get-AzStorageAccount -ResourceGroupName $StorageAccountResourceGroupName -Name $StorageAccountName $containerSas = New-AzStorageContainerSASToken -Name "sql-vulnerability-assessment" -Context $storageAccount.Context -Permission rwdl -ExpiryTime (Get-Date).AddYears(1) # 启用并配置VA策略 Set-AzSqlServerVulnerabilityAssessmentPolicy -ResourceGroupName $ResourceGroupName -ServerName $SqlServerName ` -StorageAccountName $StorageAccountName ` -ScanResultsContainerName "sql-vulnerability-assessment" ` -RecurringScansInterval Weekly ` -EmailSubscriptionAdmins $true ` -StorageAccountSasToken $containerSas
注意:需提前创建存储账户和
sql-vulnerability-assessment容器;无需自动扫描时,将-RecurringScansInterval设为None。
Azure CLI 命令(支持参数化,适配流水线)
前置要求
确保Azure CLI为最新版本:
az upgrade
1. 启用高级威胁防护(ATP)
# 替换为流水线变量(如Azure DevOps: $(ResourceGroupName)) RESOURCE_GROUP="your-resource-group" SQL_SERVER="your-sql-server" az sql server threat-policy set --resource-group $RESOURCE_GROUP --server $SQL_SERVER --state Enabled
2. 配置SQL漏洞评估(VA)
RESOURCE_GROUP="your-resource-group" SQL_SERVER="your-sql-server" STORAGE_ACCOUNT="your-storage-account" STORAGE_RG="storage-resource-group" # 生成存储账户SAS令牌(有效期1年) STORAGE_SAS=$(az storage account generate-sas --account-name $STORAGE_ACCOUNT --resource-group $STORAGE_RG --services b --resource-types c --permissions rwdl --expiry $(date -d "+1 year" +%Y-%m-%dT%H:%M:%SZ) --output tsv) # 创建存储容器(若不存在) az storage container create --name sql-vulnerability-assessment --account-name $STORAGE_ACCOUNT --sas-token $STORAGE_SAS # 启用并配置VA策略 az sql server va-policy set --resource-group $RESOURCE_GROUP --server $SQL_SERVER ` --storage-account $STORAGE_ACCOUNT ` --storage-container-path "https://$STORAGE_ACCOUNT.blob.core.windows.net/sql-vulnerability-assessment" ` --storage-sas-key $STORAGE_SAS ` --recurring-scans-interval Weekly ` --email-admins Enabled
注意:无需自动扫描时,将
--recurring-scans-interval设为None;容器已存在可跳过创建步骤。
流水线集成提示
- 将命令中的硬编码参数替换为流水线变量(如GitHub Actions:
${{ secrets.RESOURCE_GROUP }})。 - 确保流水线服务主体拥有
SQL Server Contributor和Storage Account Contributor权限,避免权限不足报错。
内容的提问来源于stack exchange,提问作者Alin Dumitru
相关产品推荐
相关产品推荐

