我们有一个数据库备份,我们需要在没有login数据库的服务器上进行恢复……所有用户都在数据库中,但是我们希望能够通过这种方式恢复数据库?
我玩过sp_change_users_login,但只适用于创build新用户或将孤立的数据库用户链接到现有服务器用户(不匹配的SID,但用户名相同)。
我需要从存储在数据库中的用户信息创build服务器login。
如果您的目标是使用相同的密码重新创buildlogin名,那么您就是SOL,它只存储在master数据库的表/视图中。 布赖恩的build议将工作,如果旧的情况下,但如果不是,那么你将需要做下面的一个选项。
要么
请注意,这只是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/认为这将是有益的为他人。
这个脚本在我的数据库中工作
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;