如何处理“只能对映射到Windows或SQL登录的用户进行重新映射”

egl*_*ius 5 sql-server sql-server-2008 bacpac azure-sql-database

场景:

尝试从 SQL Azure 获取的 bacpac 进行恢复。

到新的 SQL Azure 数据库实例或本地服务器。对于早期使用管理门户或DAC 框架客户端工具的情况

它似乎工作正常,自然地,恢复后 SQL 用户不会映射到 SQL 登录名。

我尝试过的:

当我尝试将其映射为: 时 alter user MyUser with login = MyLogin,它失败并显示:

消息 33016,级别 16,状态 1,第 6 行 用户无法重新映射到登录名。只能对映射到 Windows 或 SQL 登录名的用户进行重新映射。

运行select * from sys.database_principals确实会列出用户,但其 SID 比我创建的用于比较的 SQL 身份验证用户长得多。

在本地,如果我运行 a,则sp_change_users_login 'Report'用户不会列出,因此不会被检测为孤立的

在本地,如果我尝试使用sp_change_users_login,则会失败并显示:

消息 15291,级别 16,状态 1,过程 sp_change_users_login,第 114 行 终止此过程。用户名“MyUser”不存在或无效。

在本地,如果我通过登录属性 UI 的用户映射部分进行尝试,我会得到:

用户“我的用户”创建失败。...当前数据库中已存在用户、组或角色“MyUser”。

我尝试重新做一遍,以防由于某种原因恢复时某些内容被损坏,结果相同。

问题:

如何重新映射这些 SQL 用户?

我想避免从头开始重新创建它们以及它们与数据库中的架构对象有任何关系吗?

一些额外的信息:

一种类型的 SQL 用户看起来很像我所看到的 SQL Azure 用户,它们是使用以下命令创建的:

create user AnotherUser without login

在我上面使用的所有 3 种映射方法中,这些方法都以完全相同的方式失败。对于普通 SQL 用户来说,任何方法都不会出现这种情况。另外sid也很长,并且以相同的“0x010500000000000903000000”开头

egl*_*ius -1

如果您遇到这种情况,则很可能是备份损坏。就像链接的本地场景一样,该行为不知从何而来,并被追溯到损坏的备份。

就我而言,也是一样的。在发布问题之前,我的最后一次尝试是:数据库的不同备份,它工作没有问题