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


我将数据库从一个SQL Server实例还原到另一个SQL Server实例。数据库已经添加了用户。但是他们没有新的SQL Server实例的Login。

我知道如何为新用户创建新登录,但如何为现有用户创建登录?


15
2017-08-31 14:31






答案:


问题是恢复会从原始服务器实例中恢复数据库用户,但新实例通常不知道这些用户登录。您将在db级别的Security下看到它们,但它们没有相应的服务器级别登录。

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

有几种方法可以解决它:

  1. 在新实例上为它们创建新登录。然后,您必须将它们作为新实例上的数据库用户删除,并添加其新登录名。这看起来很奇怪,因为您可以创建相同的登录名,但SID(安全标识符)将不同,这就是SQL用于用户标识的内容。这对于一次或两次登录来说非常简单。

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


7
2017-08-31 14:44





我经常跑 的sp_change_users_login 使用“Update_One”操作命令将数据库用户与服务器登录重新链接:

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


10
2017-08-31 15:16



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


这是我发现的。

随着squillman的推出,用户会被数据库复制,但登录不会。有一个名为sp_change_users_login的商店procdure可用于解决问题。这样做的步骤详述 这个aritcle。可以在上找到使用商店procdure的详细信息 这一页


2
2017-08-31 15:11





从SQL Server 2012开始,有一个T-SQL命令可以将现有用户分配给新登录。创建登录,但不要尝试进行用户映射(它会失败)。然后执行:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

这会将现有登录映射到新用户。这里的SQL文档: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017


1
2018-04-18 15:23