当恢复到不同的实例时,有登录的用户变成没有登录的用户

User With Login becomes User without login when restored to a different instance

我在实例 A 上配置了多个 SQL 服务器登录。这些 SQL 服务器登录显式映射到特定数据库。因此,这些数据库在其安全容器中将登录名列为用户。当我将实例 A 的备份恢复到实例 B 时,数据库级别的用户变成 'user without login'。用户存在于实例 B 的服务器级别,这不是孤立登录的情况。它实际上变成了 'SQL user without login' 而不是 'SQL user with login'。有人对如何解决这个问题有任何想法吗?到目前为止,我已经用尽了所有选择。除了在数据库级别删除用户并将其添加到该数据库的服务器级别的登录名之外,似乎没有任何工作。但是,我无法继续这样做,因为它是自动化过程的一部分。

问题是您没有在实例 B 中正确创建登录名,因此它们的 SID 与实例 A 中的登录名不同。数据库用户引用 SID 而不是登录名,因此登录名相同数据库用户看不到具有附加到的 SID 的登录名。

因此您需要从实例 B 中删除本应与实例 A 中的登录相同的登录。然后使用 sp_help_revlogin 从 https://support.microsoft.com/en-us/help/918992/how-to-transfer-logins-and-passwords-between-instances-of-sql-server 将这些登录复制到实例 B .

您只需在要从中复制登录信息的实例上创建 sp_hexadecimal 和 sp_help_revlogin 存储过程,但在您的所有实例上创建它也无妨。