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

含Azure AD用户的Azure SQL Database部署.bacpac报错咨询

部署包含Azure AD用户的.bacpac文件到Azure的解决方案

问题根源

Azure AD用户的SID为GUID字符串格式,而SQL Server针对AD用户的CREATE USER语句无需指定SID。但SSMS导出的.bacpac文件中,错误地为AD用户生成了带SID = <ID>的创建脚本,导致部署时触发Supplied parameter sid should be binary(16)错误。

解决方法

方法一:导出时排除Azure AD用户

  • 用SSMS导出.bacpac时,进入高级设置,在排除对象中勾选所有Azure AD用户,仅导出数据库结构和数据。
  • 部署完成后,手动在目标数据库重建Azure AD用户及权限:
    -- 创建AD用户
    CREATE USER [ADUser] FROM EXTERNAL PROVIDER;
    -- 分配角色示例
    ALTER ROLE db_datareader ADD MEMBER [ADUser];
    

方法二:修改.bacpac文件中的脚本

  1. 将.bacpac文件重命名为.zip,解压到本地目录。
  2. 打开解压后的model.xml文件,搜索所有包含TYPE = E的CREATE USER语句(对应Azure AD外部用户)。
  3. 删除语句中的WITH SID = <ID>,部分,修改为标准格式:
    CREATE USER [ADUser] FROM EXTERNAL PROVIDER;
    
  4. 保存修改后的model.xml,重新打包为.zip文件,再改回.bacpac后缀。
  5. 使用修改后的文件进行部署。

方法三:部署时跳过用户匹配错误(应急方案)

使用Azure CLI部署时,添加参数忽略用户登录不匹配的错误,部署后手动重建用户:

az sql db import -g <资源组名> -s <服务器名> -n <数据库名> --storage-key <存储账户密钥> --storage-key-type StorageAccessKey --storage-uri <bacpac文件存储地址> --admin-user <管理员账户> --admin-password <管理员密码> --parameters "{'CommandLineParameters':'/p:IgnoreUserLoginMismatch=True'}"

注意事项

  • 部署完成后必须验证Azure AD用户的权限配置,确保业务正常访问。
  • 若目标数据库与源数据库属于不同Azure AD租户,需确保用户在目标租户中已存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:30:09