导入本地SQL数据库.bacpac到Azure SQL Server失败,遇15063错误求助
解决Azure SQL Server导入.bacpac时"The login already has an account under a different user name"错误
你猜的完全正确!这个报错的核心原因就是你要导入的本地数据库备份(.bacpac)里,已经存在一个名为[abc]的数据库用户,而Azure SQL Server上的服务器管理员登录[abc]的安全标识符(SID),和本地数据库中那个[abc]用户的SID不匹配。SQL Server不允许同一个登录映射到不同SID的数据库用户,所以执行CREATE USER [abc] FOR LOGIN [abc];时就触发了错误。
下面给你几个可行的解决办法,按操作复杂度排序:
方法一:直接在Azure上修复(最快)
既然你用的是服务器管理员账号,它默认拥有所有数据库的dbo权限,其实根本不需要额外创建[abc]数据库用户。你可以按以下步骤操作:
- 先尝试完成导入(哪怕报错,通常数据库已经部分创建成功了)
- 用你的管理员账号
[abc]连接到目标数据库 - 执行SQL命令删除冲突的本地用户:
DROP USER IF EXISTS [abc]; - 之后你就能正常以管理员身份访问数据库,因为管理员会自动映射为数据库的
dbo用户
方法二:修改.bacpac文件再导入(适合提前规避)
如果希望导入后的用户结构更贴合本地,你可以提前修改.bacpac文件:
- 把.bacpac文件的后缀改成
.zip,解压到一个文件夹 - 找到解压后的
model.xml文件,用文本编辑器打开 - 搜索
<User Name="abc">节点,删除整个用户相关的内容(包括它的角色关联、权限设置等) - 把修改后的文件重新压缩成.zip,改回.bacpac后缀,再用SSMS导入
方法三:换用Azure Portal导入
有时候SSMS的导入工具对权限冲突的处理不够灵活,你可以试试Azure Portal的导入功能:
- 登录Azure Portal,进入你的SQL Server实例
- 在左侧菜单选择「导入数据库」
- 选择存储账户中的.bacpac文件,设置目标数据库名称
- 按照向导完成导入,Azure会自动处理部分常见的权限冲突,或者给出更明确的调整提示
内容的提问来源于stack exchange,提问作者Alistair67
相关产品推荐
相关产品推荐

