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

如何通过Azure门户CLI连接Azure托管实例执行DDL脚本?

解决Azure托管实例(MI)连接失败并执行SQL脚本的方案

一、先排查核心连接障碍

  • 确认网络可达性:Azure MI部署在专属VNet内,执行脚本的环境(Azure门户Cloud Shell、本地机器、DevOps代理)必须处于MI的VNet/对等VNet中,或通过VPN/Express Route建立连接。若使用Azure门户Cloud Shell,需将其所在子网加入MI的VNet,或开启MI的公共端点(注意配置安全规则)。
  • 验证防火墙规则:在Azure门户的MI资源页,进入「防火墙和虚拟网络」设置,确认允许当前客户端IP访问(公共端点场景),或VNet内访问权限已启用。
  • 核对实例地址与端口:MI的标准连接格式为Server=tcp:<mi-name>.public.<region>.database.windows.net,3342;Database=<db-name>;...,公共端点固定用3342端口,私有端点使用1433端口,需确保地址和端口无错误。

二、使用Azure CLI连接并执行SQL脚本

Azure CLI提供原生的az sql mi execute命令,无需额外依赖,适合快速操作:

# 登录Azure(未登录时执行)
az login

# 直接执行单条SQL查询
az sql mi execute --name <mi-name> --resource-group <rg-name> --database <db-name> --query-text "SELECT * FROM db.schema.table"

# 执行本地SQL脚本文件
az sql mi execute --name <mi-name> --resource-group <rg-name> --database <db-name> --file-path ./your-script.sql

三、PowerShell正确连接方式(修复invoke-SQLCMD失败问题)

1. SQL认证方式

$connectionString = "Server=tcp:<mi-name>.public.<region>.database.windows.net,3342;Database=<db-name>;User ID=<sql-login>;Password=<sql-password>;Encrypt=True;TrustServerCertificate=False;"
Invoke-SqlCmd -ConnectionString $connectionString -Query "SELECT * FROM db.schema.table"

2. Azure AD认证(推荐用于DevOps流水线)

密码认证

$connectionString = "Server=tcp:<mi-name>.public.<region>.database.windows.net,3342;Database=<db-name>;Authentication=Active Directory Password;User ID=<aad-user>;Password=<aad-pass>;Encrypt=True;TrustServerCertificate=False;"
Invoke-SqlCmd -ConnectionString $connectionString -Query "SELECT * FROM db.schema.table"

服务主体认证(流水线无交互场景)

$tenantId = "<tenant-id>"
$clientId = "<sp-client-id>"
$clientSecret = "<sp-secret>"
$connectionString = "Server=tcp:<mi-name>.public.<region>.database.windows.net,3342;Database=<db-name>;Authentication=Active Directory Service Principal;User ID=$clientId;Password=$clientSecret;Encrypt=True;TrustServerCertificate=False;"
Invoke-SqlCmd -ConnectionString $connectionString -Query "SELECT * FROM db.schema.table"

四、Azure DevOps流水线适配方案

1. Azure CLI任务方案

- task: AzureCLI@2
  inputs:
    azureSubscription: '<你的Azure服务连接>'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az sql mi execute --name <mi-name> --resource-group <rg-name> --database <db-name> --query-text "SELECT * FROM db.schema.table"

2. PowerShell+服务主体方案

先确保服务主体拥有MI目标数据库的对应权限(如db_datareader),再配置流水线任务:

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      $connectionString = "Server=tcp:<mi-name>.public.<region>.database.windows.net,3342;Database=<db-name>;Authentication=Active Directory Service Principal;User ID=$(ServicePrincipalId);Password=$(ServicePrincipalKey);Encrypt=True;TrustServerCertificate=False;"
      Invoke-SqlCmd -ConnectionString $connectionString -Query "SELECT * FROM db.schema.table"
  env:
    ServicePrincipalId: $(ServicePrincipalId)
    ServicePrincipalKey: $(ServicePrincipalKey)

注:需在DevOps变量库中配置服务主体的ID和密钥作为保密变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:04:55