在SQL Server中,如何为现有用户创建登录名?


17

我将数据库从一个SQL Server实例还原到另一个SQL Server实例。数据库已准备就绪,已经向其添加了用户。但是他们没有新的SQL Server实例的登录名。

我知道如何为新用户创建新的登录名,但是如何为现有用户创建“登录名”?

Answers:


9

问题在于,还原操作从原始服务器实例中恢复了db用户,但是新实例通常不知道这些用户登录名。您会在数据库级别的“安全性”下看到它们,但是它们没有相应的服务器级别登录名。

您需要在还原数据库的实例上使用服务器登录名将数据库用户重新附加。

有几种解决方法:

  1. 在新实例上为其创建新的登录名。然后,您必须在新实例上以数据库用户的身份删除他们,并添加他们的新登录名。鉴于可以创建相同的登录名,这似乎很奇怪,但是SID(安全标识符)将有所不同,这就是SQL用于标识用户的身份。对于一两次登录来说,这很容易。

  2. 如果要在实例之间维护相同的用户,并保持相同的SID,使用sp_help_revlogin存储过程。从链接中复制代码,该链接将创建必要的存储过程,并在要从中复制用户的服务器上运行它。它将生成一个SQL脚本,您可以在目标服务器上运行该脚本,以创建携带SID,密码和所有内容的相同用户。如果您有很多数据库用户需要在目标实例上重新连接,或者您不知道源实例上一个或多个SQL登录名的密码,这就是这种方法。


10

我始终使用'Update_One'操作运行sp_change_users_login命令,以将数据库用户与服务器登录名重新链接:

sp_change_users_login 'Update_One', 'database user', 'server login'


酷我用这个:EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';代替。:)
user2173353

仅当您同时具有数据库用户和服务器登录名但它们之间的链接断开时,这不是唯一可行的方法吗?
wenzzzel

2

这是我发现的。

就像squillman解释的那样,用户被复制到数据库中,但登录名未被复制。有一个名为sp_change_users_login的商店程序可用于解决此问题。此步骤的步骤在详细说明。可以在此页面找到使用商店程序的详细信息。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.