在SQL Server 2008上将数据库用户还原到服务器login

我们有一个数据库备份,我们需要在没有login数据库的服务器上进行恢复……所有用户都在数据库中,但是我们希望能够通过这种方式恢复数据库?

我玩过sp_change_users_login,但只适用于创build新用户或将孤立的数据库用户链接到现有服务器用户(不匹配的SID,但用户名相同)。

我需要从存储在数据库中的用户信息创build服务器login。

如果您的目标是使用相同的密码重新创buildlogin名,那么您就是SOL,它只存储在master数据库的表/视图中。 布赖恩的build议将工作,如果旧的情况下,但如果不是,那么你将需要做下面的一个选项。

  • 重新创buildlogin
  • 使用sp_change_users_login将数据库用户映射到新的login名

要么

  • 创build新的login
  • 在恢复的数据库中为该login名分配权限

请注意,这只是SQLlogin的情况,如果您使用的是Active Directorylogin,那么您只需将其添加回服务器,并且它们将自动拥有恢复的数据库的权限,因为密码和SID存储在AD而不是在实例的主数据库中。

我不相信你有足够的数据库中的用户信息来创buildlogin。 特定于login的信息驻留在主数据库中,而数据库用户信息(包括映射)驻留在各个数据库中。

如果原始服务器可用,则有一个称为sp_rev_login的系统存储过程,您可以从此Microsoft支持文章创build该系统存储过程,该文章将编写login信息(包括正确的SID)。 然后您可以协调login到用户。

我有一个很好的脚本,可以用来创build数据库用户login,这个脚本是使用存储过程,你可以在下面的URLfind: 如何脚本loginSQL Server 2005中的用户数据库

USE MyDatabaseName DECLARE @login nvarchar(50) DECLARE logins_cursor CURSOR FOR SELECT l.name FROM sys.database_principals u INNER JOIN sys.server_principals l ON u.sid=l.sid OPEN logins_cursor FETCH NEXT FROM logins_cursor INTO @login WHILE @@FETCH_STATUS = 0 BEGIN EXEC sp_help_revlogin @login FETCH NEXT FROM logins_cursor INTO @login END CLOSE logins_cursor DEALLOCATE logins_cursor GO 

尝试

 EXEC sp_change_users_login 'Report' EXEC sp_change_users_login 'AUTO_FIX', '<user name>', NULL, '<password>' 

您从第一个查询中find的用户名之一是您想要分配给用户的新密码。

我无耻地重新发布信息,我刚刚发现 – http://tim-stanley.com/post/how-to-restore-a-sql-user-after-a-sql-database-restore/认为这将是有益的为他人&#x3002;

这个脚本在我的数据库中工作

 DECLARE @login nvarchar(50) DECLARE logins_cursor CURSOR FOR select master..syslogins.name as login_name from master..syslogins WHERE master..syslogins.name<>'BUILTIN\Administrators' OPEN logins_cursor FETCH NEXT FROM logins_cursor INTO @login WHILE @@FETCH_STATUS = 0 BEGIN EXEC dbo.sp_change_users_login 'Auto_Fix' , @login FETCH NEXT FROM logins_cursor INTO @login END CLOSE logins_cursor DEALLOCATE logins_cursor GO select master..syslogins.name as login_name, sysusers.name as user_name from master..syslogins LEFT OUTER JOIN sysusers on master..syslogins.suid = sysusers.suid 

– 注意:在sql2000中使用 – > master..syslogins.sid = sysusers.sid

创buildlogin,然后使用:

 ALTER USER usr1 WITH LOGIN = login1;