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

禁用存储账户密钥后,New-AzSqlDatabaseImport不支持Entra ID,如何导入bacpac?

替代New-AzSqlDatabaseImport导入BACPAC的可行方案

以下是在存储账户仅允许Entra ID+RBAC访问时,导入testdb.bacpac到Azure SQL数据库的几种可行方案:

方案1:使用Azure CLI的az sql db import命令

Azure CLI的该命令支持Entra ID身份认证,无需存储账户密钥。

  • 前提:Azure DevOps流水线的服务主体需具备以下权限:
    • 存储账户的存储Blob数据读取者角色(用于访问BACPAC文件)
    • Azure SQL服务器的SQL DB Contributor或等效权限(用于创建数据库)
  • 示例命令:
    az sql db import \
      --resource-group <你的资源组名称> \
      --server <你的SQL服务器名称> \
      --name <新测试数据库名称> \
      --storage-uri https://<存储账户名>.blob.core.windows.net/<容器名>/testdb.bacpac \
      --admin-user <SQL管理员用户名> \
      --admin-password <SQL管理员密码> \
      --storage-key-type AzureAD
    
  • 优势:直接替换原PowerShell命令,无需额外工具,配置简单。

方案2:使用SQLPackage工具(DacFx)

SQLPackage是微软官方的数据库部署工具,支持多种Entra ID认证方式,需先将BACPAC下载到流水线代理本地再导入。

步骤:

  1. 下载BACPAC到代理:用支持Entra ID的工具(如AzCopy或Azure CLI)从存储账户下载文件
    # AzCopy示例(自动使用当前Entra身份)
    azcopy copy "https://<存储账户名>.blob.core.windows.net/<容器名>/testdb.bacpac" "./testdb.bacpac"
    
  2. 执行导入:使用SQLPackage命令导入到Azure SQL
    # 系统托管身份认证示例(适用于流水线启用托管身份的场景)
    sqlpackage /Action:Import \
      /SourceFile:"./testdb.bacpac" \
      /TargetServerName:"<SQL服务器名>.database.windows.net" \
      /TargetDatabaseName:"<新测试数据库名称>" \
      /Authentication:ActiveDirectoryManagedIdentity
    
    服务主体认证示例:
    sqlpackage /Action:Import \
      /SourceFile:"./testdb.bacpac" \
      /TargetServerName:"<SQL服务器名>.database.windows.net" \
      /TargetDatabaseName:"<新测试数据库名称>" \
      /Authentication:ActiveDirectoryServicePrincipal \
      /TargetUser:<服务主体客户端ID> \
      /TargetPassword:<服务主体密钥>
    
  • 优势:提供丰富的导入配置选项(如调整数据库大小、索引优化等),适合复杂场景。

方案3:通过Azure Data Factory (ADF) 流水线封装导入逻辑

将BACPAC导入逻辑封装到ADF流水线中,Azure DevOps仅触发执行,适合企业级自动化流程。

  • 配置步骤:
    1. 在ADF中创建存储账户链接服务,使用Entra ID(托管身份/服务主体)认证
    2. 创建Azure SQL链接服务,同样使用Entra ID认证
    3. 新建流水线,添加「Azure SQL数据库导入」活动,配置存储账户的BACPAC路径、目标SQL数据库信息
    4. 在Azure DevOps流水线中添加「Azure Data Factory 流水线」任务,触发ADF流水线执行
  • 优势:导入逻辑可视化,可与其他数据流程集成,便于监控和维护。

方案4:调用Azure REST API实现导入

通过Entra ID获取访问令牌后,调用Azure SQL的导入API,适合高度自定义的集成场景。

步骤:

  1. 获取Entra ID访问令牌
    az account get-access-token --resource https://management.azure.com --query accessToken -o tsv
    
  2. 发送POST请求到导入API:
    POST https://management.azure.com/subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.Sql/servers/<SQL服务器名>/databases/<新数据库名>/import?api-version=2021-11-01
    Authorization: Bearer <你的访问令牌>
    Content-Type: application/json
    
    {
      "properties": {
        "storageKeyType": "AzureAD",
        "storageUri": "https://<存储账户名>.blob.core.windows.net/<容器名>/testdb.bacpac",
        "administratorLogin": "<SQL管理员用户名>",
        "administratorLoginPassword": "<SQL管理员密码>",
        "databaseName": "<新测试数据库名称>",
        "edition": "GeneralPurpose",
        "serviceObjectiveName": "GP_Gen5_2"
      }
    }
    
  • 优势:完全自定义导入流程,适合嵌入到复杂的自动化系统中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:33:18