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

如何通过Bicep为Azure SQL创建额外登录、管理员及数据库用户?

针对Azure SQL IaC部署相关问题的解决方案

1. 设置多个Azure AD管理员

Azure SQL服务器支持同时添加多个Azure AD管理员(含用户和组),无需局限于单个主体。用Bicep配置时,直接在Microsoft.Sql/servers资源的administrators属性中添加多组AD主体信息:

resource sqlServer 'Microsoft.Sql/servers@2023-05-01-preview' = {
  name: 'your-sql-server-name'
  location: resourceGroup().location
  properties: {
    administratorLogin: '' // 留空,启用AD管理员模式
    administratorLoginPassword: ''
    version: '12.0'
  }
  resources: [
    resource sqlServerAdmin 'Microsoft.Sql/servers/administrators@2023-05-01-preview' = {
      name: 'ActiveDirectory'
      properties: {
        administratorType: 'ActiveDirectory'
        login: 'DBA-Team-Group' // DBA组名称
        sid: '<DBA-Group-Object-ID>' // 组的Azure AD对象ID
        tenantId: subscription().tenantId
        azureADOnlyAuthentication: true // 可选:强制仅AD身份验证
        administrators: [
          {
            login: 'Your-User-Name'
            sid: '<Your-User-Object-ID>' // 你的Azure AD对象ID
            tenantId: subscription().tenantId
          }
        ]
      }
    }
  ]
}

注意:sid需替换为对应AD主体的对象ID,可通过Azure Portal或az ad user show/az ad group show命令获取。

2. 用Bicep自动创建数据库级用户(无需手动登录)

要在部署流程中自动生成数据库用户,可通过Bicep的Microsoft.Sql/servers/databases/extensions资源执行SQL脚本,借助部署身份(如服务主体)的Azure AD权限完成操作,无需手动登录SSMS:

resource sqlDb 'Microsoft.Sql/servers/databases@2023-05-01-preview' = {
  name: 'your-db-name'
  parent: sqlServer
  location: resourceGroup().location
  properties: {
    collation: 'SQL_Latin1_General_CP1_CI_AS'
  }
}

// 执行SQL脚本创建数据库用户
resource createDbUsers 'Microsoft.Sql/servers/databases/extensions@2021-11-01' = {
  name: 'CreateDbUsers'
  parent: sqlDb
  properties: {
    type: 'SqlAzureDbScript'
    settings: {
      scriptUrl: '<SAS-URL-to-your-SQL-script>' // 存储于Blob存储的SQL脚本SAS链接
      sqlAuthenticationType: 'AzureAD' // 使用AD身份验证执行脚本
    }
  }
}

对应的SQL脚本示例(创建AD用户并分配权限):

-- 创建开发人员AD用户并赋予读写权限
CREATE USER [Dev-User] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [Dev-User];
ALTER ROLE db_datawriter ADD MEMBER [Dev-User];

-- 创建应用服务主体用户并赋予所有者权限
CREATE USER [App-SP] FROM EXTERNAL PROVIDER;
ALTER ROLE db_owner ADD MEMBER [App-SP];

若不想依赖外部存储,也可通过Bicep的loadTextContent函数加载本地SQL脚本,或直接内联简短脚本(注意长度限制)。

3. SQL脚本创建用户的连接账号解决方案

若必须手动执行SQL脚本但无现有管理员权限,可采用以下两种方式解决:

  • 临时添加自身为AD管理员:通过Bicep或Azure CLI临时将自己设为服务器管理员,执行脚本后移除:
    az sql server ad-admin create --resource-group your-rg --server your-sql-server --display-name "Your Name" --object-id <Your-Object-ID>
    # 执行SQL脚本后移除管理员权限
    az sql server ad-admin delete --resource-group your-rg --server your-sql-server
    
  • 使用服务主体执行脚本:创建Azure AD服务主体并赋予Azure SQL DB Contributor权限,通过sqlcmd用该主体登录执行脚本:
    sqlcmd -S your-sql-server.database.windows.net -d your-db -G -U <SP-Client-ID> -P <SP-Secret> -i create-users.sql
    

关键注意事项

  • 部署身份(服务主体或操作用户)需具备Microsoft.Sql/servers/administrators/write权限以设置管理员,以及Microsoft.Sql/servers/databases/extensions/write权限以执行脚本。
  • 若启用azureADOnlyAuthentication,SQL登录将被禁用,所有操作必须通过Azure AD身份验证完成。
  • Azure AD类型的数据库用户无需服务器级登录,直接通过CREATE USER ... FROM EXTERNAL PROVIDER即可关联AD主体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:05:22