白杨商业智能工作室
#技术分享#Azure SQL

Azure SQL 导入导出终于不用存密码了!托管身份认证正式公测

· 白杨BI工作室

做过 Azure SQL 迁移的同学一定经历过这种糟心时刻——BACPAC 导入导出时,脚本里明文写着 SQL 管理员密码和 Storage Account 密钥,或者挂着一个随时可能过期的 SAS Token。万一泄露了……不敢想。 现在微软终于把这个问题解决了。

Azure SQL 导入导出终于不用存密码了!托管身份认证正式公测

做过 Azure SQL 迁移的同学一定经历过这种糟心时刻——BACPAC 导入导出时,脚本里明文写着 SQL 管理员密码和 Storage Account 密钥,或者挂着一个随时可能过期的 SAS Token。万一泄露了……不敢想。

现在微软终于把这个问题解决了。Azure SQL Database 的导入导出服务正式支持 用户分配的托管身份(User-Assigned Managed Identity,简称 UAMI) 认证,公测阶段已开放。

一句话总结:以后做数据库迁移,密码、密钥、SAS Token 全部可以 Bye Bye 了。 🔑


🔍 这东西到底干了什么?

以前 Azure SQL 导入导出 BACPAC 文件时,你得提供两类凭证:

  1. SQL 认证信息 — 管理员账号 + 密码
  2. Storage 认证信息 — 存储账户密钥或 SAS Token

这意味着你的 CI/CD 脚本、自动化流水线里不可避免地要嵌入敏感信息。即使你用 Azure Key Vault 存储,调用链路依然复杂,而且密钥轮换时又是一顿折腾。

现在有了托管身份认证,导入导出操作可以直接用 Azure AD 身份 完成认证,全程零密码、零密钥。


💡 两种方案,按需选择

微软给了两种灵活的配置方式:

| 方案 | 说明 | 适用场景 | |------|------|----------| | 一个 UAMI 通吃 | SQL 和 Storage 共用同一个托管身份 | 简单快速部署,团队规模小,安全要求适中 | | 两个 UAMI 分开 | SQL 用一个身份,Storage 用另一个身份 | 企业级安全合规,需要最小权限隔离 |

推荐做法:如果你对权限管控要求比较严格(比如金融、医疗行业),用两个 UAMI 把 SQL 权限和 Storage 权限完全分开,符合最小权限原则。


🛠️ 配置步骤(5 步搞定)

Step 1:创建托管身份

在 Azure Portal 创建一个或两个「用户分配的托管身份」(UAMI)。建议提前规划好用一个还是两个。

Step 2:把 UAMI 绑到 SQL 逻辑服务器

在 Azure SQL Logical Server 的 Identity 页面,添加刚创建的 UAMI。这样导入导出作业就能以该身份运行了。

Step 3:设置 Entra ID 管理员

在 Microsoft Entra ID > Set admin 中选择这个 UAMI。这一步很关键——它让工作流可以免密码连接到 SQL。

Step 4:给 Storage 授权

在存储账户的 Access Control (IAM) 中给 UAMI 分配 RBAC 角色:

  • 导入操作:分配 Storage Blob Data Reader
  • 导出操作:分配 Storage Blob Data Contributor

最佳实践:把权限范围限制到存放 .bacpac 文件的具体容器,而不是整个存储账户。

Step 5:调用时传 Resource ID

在 REST / CLI / PowerShell 中,不再传用户名和密码,而是传 UAMI 的 Resource ID:

  • administratorLogin → 用于 SQL 认证的 UAMI Resource ID
  • storageKey → 用于 Storage 认证的 UAMI Resource ID
  • authenticationType / storageKeyType → 设为 ManagedIdentity

📋 代码示例

PowerShell — 导出(一个 UAMI)

$exportBody = @{
    storageKeyType = "ManagedIdentity"
    storageKey = $managedIdentityServerResourceId
    storageUri = $storageUri
    administratorLogin = $managedIdentityServerResourceId
    authenticationType = "ManagedIdentity"
} | ConvertTo-Json

$export = Invoke-AzRestMethod -Method POST `
    -Path "/subscriptions/$subscriptionId/resourceGroups/$rg/providers/Microsoft.Sql/servers/$server/databases/$db/export?api-version=2024-05-01-preview" `
    -Payload $exportBody

Azure CLI — 导入(两个 UAMI)

az sql db import \
  -s $serverName -n $dbName -g $rgName \
  --auth-type ManagedIdentity \
  -u $managedIdentityServerResourceId \
  --storage-key $managedIdentityStorageResourceId \
  --storage-key-type ManagedIdentity \
  --storage-uri $storageUri

PowerShell — 导入(两个 UAMI 分离)

New-AzSqlDatabaseImport `
  -ResourceGroupName $rg `
  -DatabaseName $dbName `
  -ServerName $server `
  -StorageKeyType ManagedIdentity `
  -StorageKey $managedIdentityStorageResourceId `
  -StorageUri $storageUri `
  -AuthenticationType ManagedIdentity `
  -AdministratorLogin $managedIdentityServerResourceId

🌐 国内用户关心的问题

Q: 这个功能在国内的 Azure 中国区能用吗?

Azure 中国区(由 21Vianet 运营)也支持托管身份和 Entra ID(国内叫 Azure AD),但具体功能上线时间可能与国际版有差异,建议查看 Azure 中国区官方文档确认。

Q: 跟阿里云 RDS / 腾讯云 CDB 的数据迁移比,体验如何?

国内云厂商的数据迁移通常依赖 DTS(数据传输服务)或类似的专用工具。Azure SQL 这次的思路不同——直接在导入导出服务层面集成身份认证,让 BACPAC 迁移这条老路也能享受零密钥的安全体验。两条路各有优劣,取决于你的具体场景。

Q: 从自建 SQL Server 迁移到 Azure SQL,用这个功能方便吗?

很方便。把自建数据库导出为 BACPAC,上传到 Azure Blob Storage,然后用托管身份认证导入 Azure SQL。全程不需要在脚本里暴露任何密码。

Q: 已有的导入导出脚本需要改吗?

如果你之前用的是 SQL 认证 + Storage 密钥的方式,需要把认证参数换成 UAMI Resource ID,并把 authenticationType 设为 ManagedIdentity。改动量不大,但需要提前创建好 UAMI 并完成权限配置。


📝 小结

这个功能解决的不是一个「能不能用」的问题,而是一个「安不安全」的问题。对于把数据库迁移纳入 CI/CD 流水线的团队来说,托管身份认证意味着:

  • ✅ 脚本里不再有明文密码
  • ✅ 不用再管理 SAS Token 的过期时间
  • ✅ 密钥轮换时不需要改导入导出配置
  • ✅ 权限可以精细到容器级别

如果你正在用 Azure SQL 并且有定期导入导出的需求,强烈建议试试这个预览功能。


原文链接:https://techcommunity.microsoft.com/t5/azure-sql-blog/managed-identity-support-for-azure-sql-database-import-export/ba-p/4498732

发布日期:2026-03-03

相关文章

微软重磅调整:Azure SQL弃用SGX加密意味着什么

微软重磅调整:Azure SQL弃用SGX加密意味着什么

微软 Azure SQL 数据库近日宣布,将正式停用基于英特尔 SGX 安全区域的 Always Encrypted 加密方案,这一变化标志着云端机密计算在数据库加密领域的一次重要技术路线调整。

#技术分享#Azure SQL
Azure SQL数据库中心性能监控来了,你的数据库终于有救了

Azure SQL数据库中心性能监控来了,你的数据库终于有救了

微软近日宣布,Azure SQL 数据库中心(Database Hub)的性能监控功能正式进入公共预览阶段,用户现可在统一门户中直接查看数据库运行指标,无需在多套工具间来回切换。

#技术分享#Azure SQL
微软Fabric数据库中心公共预览开放,数据开发迎来巨变

微软Fabric数据库中心公共预览开放,数据开发迎来巨变

数据库管理正在从被动运维走向主动洞察。微软近日宣布,Fabric 中的数据库中心(Database Hub)正式进入公共预览阶段,这项新能力将数据库运行信号转化为可执行的引导式操作,让数据资产的管理者第一次拥有了驾驶舱式的全局视野。

#技术分享#Azure SQL
SQL Server Always On终于支持多数据库MI链接了

SQL Server Always On终于支持多数据库MI链接了

微软近日宣布,Azure SQL 托管实例(MI Link)现已支持在 SQL Server 的 Always On 可用性组中同时连接多个数据库,该功能目前处于预览阶段。这意味着企业可以在混合云架构下,更灵活地实现多数据库的云端灾备与只读分流。

#技术分享#Azure SQL
Azure SQL数据库无服务器也能自动暂停?省钱大招来了

Azure SQL数据库无服务器也能自动暂停?省钱大招来了

微软近日宣布,Azure SQL 数据库的超大规模无服务器版本正式进入自动暂停与自动恢复功能的公开预览阶段。这意味着企业可以在业务低谷期让数据库自动休眠,在请求到来时秒级唤醒,从根本上重构云数据库的成本模型。

#技术分享#Azure SQL
SQL数据同步退役倒计时,你的数据库迁移方案准备好了吗

SQL数据同步退役倒计时,你的数据库迁移方案准备好了吗

微软近日宣布,Azure SQL 数据同步服务(SQL Data Sync)正式进入退役的最后阶段,该服务将不再支持新的同步组创建,现有用户需尽快迁移至替代方案。 - 停止新建同步组:用户已无法通过门户或 API 创建新的数据同步组,现有同步组仍可运行,但不再获得功能更新。

#技术分享#Azure SQL
有问题?加企业微信 1 对 1 交流 👇
➕ 添加企业微信
备注「白杨」优先通过 · 数据洞察与智能决策
企业微信
企业微信
备注「白杨」优先通过