我从一个SQL Server实例将数据库恢复到另一个SQL Server实例。 数据库已经有用户添加到它。 但是他们没有login新的SQL Server实例。
我知道如何为新用户创build新login,但是如何为现有用户创buildlogin?
问题是,还原从原始服务器实例中带回数据库用户,但新实例通常不知道这些用户login。 你会看到他们在数据库级别的安全性,但他们没有相应的服务器级别login。
您需要在已恢复数据库的实例上重新连接具有服务器login名的数据库用户。
有几种方法可以去做:
在新实例上为它们创build新的login名。 然后,您必须将其作为新实例上的数据库用户删除并添加新的login名。 这似乎很奇怪,因为您可以创build相同的login名,但SID(安全标识符)将会不同,这是SQL用于用户标识的内容。 这对于一两次login就足够简单了。
如果要维护相同的用户,请保留相同的SID,然后使用sp_help_revlogin存储过程。 复制链接中的代码,该链接将创build必要的存储过程,并在要从中复制用户的服务器上运行。 它将生成一个SQL脚本,您可以在目标服务器上运行,以创build携带SID,密码和所有内容的相同用户。 如果您需要在目标实例上重新连接大量数据库用户,或者如果您不知道源实例上的一个或多个SQLlogin名的密码,则这是要走的路。
我总是使用“Update_One”操作运行sp_change_users_login命令,以便将数据库用户重新链接到服务器login名:
sp_change_users_login 'Update_One', 'database user', 'server login
'
这是我发现的。
随着squillman扩展,用户将被复制到数据库,但login不会。 有一个名为sp_change_users_login的存储过程可以用来解决问题。 本文详细介绍了这些步骤。 使用商店程序的细节可以在这个页面find。