You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL与App Service托管标识配置疑问及Bicep脚本需求

Azure SQL + 托管身份配置问题解答

1. 创建角色分配是否需要AAD P1/P2?

不需要。AAD免费版完全支持Azure RBAC角色分配和托管身份的基础功能。AAD P1/P2是用于高级身份治理(比如条件访问、身份保护、特权身份管理)的付费功能,和配置托管身份访问Azure SQL的核心流程无关。只要你有目标资源(比如App Service、SQL Server)的所有者或参与者权限,就能完成角色分配和权限配置。

2. 实现配置的Bicep脚本示例

以下是完整的Bicep模板,包含系统托管身份的App Service、Azure SQL Database,以及配置App Service身份访问SQL的权限:

// 目标资源组和位置
param resourceGroupName string
param location string = resourceGroup().location

// SQL Server参数
param sqlServerName string
param sqlAdminLogin string
param sqlAdminPassword string
param sqlDatabaseName string = 'AppDB'

// App Service参数
param appServiceName string
param appServicePlanName string = 'AppServicePlan'

// 1. 创建App Service计划
resource appServicePlan 'Microsoft.Web/serverfarms@2023-01-01' = {
  name: appServicePlanName
  location: location
  sku: {
    name: 'B1' // 根据需求调整SKU
    tier: 'Basic'
  }
}

// 2. 创建带系统托管身份的App Service
resource appService 'Microsoft.Web/sites@2023-01-01' = {
  name: appServiceName
  location: location
  identity: {
    type: 'SystemAssigned' // 启用系统托管身份
  }
  properties: {
    serverFarmId: appServicePlan.id
    siteConfig: {
      alwaysOn: true
    }
  }
}

// 3. 创建SQL Server
resource sqlServer 'Microsoft.Sql/servers@2023-02-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlAdminLogin
    administratorLoginPassword: sqlAdminPassword
    version: '12.0'
  }
}

// 4. 创建SQL Database
resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-02-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: {
    name: 'GP_Gen5_2' // 根据需求调整SKU
  }
}

// 5. 配置SQL Server的AAD管理员(必须设置,否则无法用AAD身份访问)
resource sqlServerAadAdmin 'Microsoft.Sql/servers/administrators@2023-02-01-preview' = {
  parent: sqlServer
  name: 'activeDirectory'
  properties: {
    administratorType: 'ActiveDirectory'
    login: 'AAD-SQL-Admin' // 替换为你的AAD组或用户名称
    sid: '<AAD-ADMIN-OBJECT-ID>' // 替换为AAD组/用户的Object ID
    tenantId: subscription().tenantId
  }
}

// 6. 给App Service的托管身份分配SQL DB的权限
// 注意:需要先在SQL中创建对应的AAD用户,这里用post-deployment脚本执行
resource sqlDbUserScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'CreateSqlDbUser'
  location: location
  kind: 'AzurePowerShell'
  properties: {
    azPowerShellVersion: '7.4'
    scriptContent: '''
      $context = Get-AzContext
      $serverName = "${sqlServerName}"
      $dbName = "${sqlDatabaseName}"
      $identityObjectId = "${appService.identity.principalId}"
      $identityName = "${appService.name}"

      # 连接SQL并创建AAD用户
      $sqlConnectionString = "Server=tcp:$serverName.database.windows.net,1433;Initial Catalog=$dbName;Authentication=Active Directory Default;Encrypt=True"
      $sqlCommand = @"
        CREATE USER [$identityName] FROM EXTERNAL PROVIDER;
        ALTER ROLE db_datareader ADD MEMBER [$identityName];
        ALTER ROLE db_datawriter ADD MEMBER [$identityName];
      "@

      Invoke-SqlCmd -ConnectionString $sqlConnectionString -Query $sqlCommand
    '''
    cleanupPreference: 'OnSuccess'
    timeout: 'PT10M'
  }
}

使用说明:

  • 替换<AAD-ADMIN-OBJECT-ID>为你的AAD用户或组的Object ID(该账号需要有SQL Server的管理员权限)
  • 根据业务需求调整SKU和权限(比如添加db_owner或自定义角色)

3. 是否必须采用Azure AD认证?

不是强制要求,但强烈推荐。如果不用Azure AD认证,你只能依赖传统的SQL账号密码,生产环境中存在以下问题:

  • 密码需要定期轮换,增加运维成本
  • 密码可能被泄露或硬编码在配置中,带来安全风险
  • 无法利用AAD的身份治理功能(比如MFA、条件访问)

托管身份+Azure AD认证是生产环境的最佳实践,完全避免了密码管理的痛点。

4. 本地开发时如何连接数据库?

本地开发时可以通过以下几种方式连接,不需要依赖App Service的托管身份:

  • 方式1:使用个人AAD账号连接

    1. 在SQL Database中创建你的AAD用户:CREATE USER [你的AAD邮箱] FROM EXTERNAL PROVIDER;
    2. 给该用户分配权限:ALTER ROLE db_datareader ADD MEMBER [你的AAD邮箱];
    3. 连接时选择Azure AD交互式认证(SSMS、Azure Data Studio或代码中都支持),会弹出登录窗口验证你的AAD账号。
  • 方式2:使用AAD应用注册身份连接

    1. 在AAD中创建一个应用注册,生成客户端密钥
    2. 在SQL Database中创建该应用的用户:CREATE USER [应用注册名称] FROM EXTERNAL PROVIDER;
    3. 给应用分配权限,然后在本地代码中使用应用的客户端ID、密钥和租户ID构建连接字符串,采用Azure AD Service Principal认证方式。
  • 方式3:临时使用SQL账号(不推荐生产)
    本地调试时可以临时使用SQL管理员账号或专用SQL账号,但注意不要把密码提交到代码仓库,调试完成后建议禁用该账号。

内容的提问来源于stack exchange,提问作者lcj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:45:26