Назад | Перейти на главную страницу

Восстановление пользователя базы данных для входа на сервер в SQL Server 2008

У нас есть резервная копия базы данных, которую нам нужно восстановить на сервере, на котором нет учетных записей для базы данных ... все пользователи находятся в базе данных, поэтому мы надеемся, что сможем восстановить ее таким образом?

Я играл с sp_change_users_login, но он работает только с созданием новых пользователей или связыванием осиротевших пользователей базы данных с существующими пользователями сервера (несоответствующие идентификаторы безопасности, но те же имена пользователей).

Мне нужно создать логины на сервере из информации о пользователе, хранящейся в базе данных.

Если ваша цель здесь - воссоздать логины с тем же паролем, тогда вы - SOL, он хранится только в таблицах / представлениях в базе данных master. Рекомендация Брайана будет работать, если старый экземпляр все еще существует, но в противном случае вам нужно будет выполнить один из вариантов ниже.

  • Восстановите логины
  • Используйте процедуру sp_change_users_login, чтобы сопоставить пользователя базы данных с новым именем входа

или

  • Создать новые логины
  • Назначьте права этому логину в восстановленной базе данных

Обратите внимание, что это касается только учетных записей SQL, если вы используете учетные записи Active Directory, тогда все, что вам нужно сделать, это добавить их обратно на сервер, и они автоматически получат права в восстановленных базах данных, поскольку пароль и SID хранятся в AD. а не в базе данных master для экземпляра.

Я не верю, что у вас достаточно информации о пользователях в базе данных для создания логинов. Информация для входа в систему находится в главной базе данных, тогда как информация о пользователях базы данных (включая сопоставления) находится в отдельных базах данных.

Если исходный сервер доступен, существует системная хранимая процедура sp_rev_login, которую вы можете создать из этого Статья поддержки Microsoft который запишет информацию для входа в систему, включая правильные SID. Затем вы можете согласовать логины с пользователями.

У меня есть хороший скрипт, который вы можете использовать для создания логинов от пользователей базы данных, этот скрипт использует хранимую процедуру, которую вы можете найти по следующему URL-адресу: Как создать сценарий входа в систему из базы данных пользователей в SQL 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>'

Где одно из имени пользователя, которое вы нашли в первом запросе, и новый пароль, который вы хотите назначить пользователю.

Я беззастенчиво повторно публикую информацию, которую только что нашел на ... 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

- ПРИМЕЧАНИЕ: use-> master..syslogins.sid = sysusers.sid в sql2000

Создайте логины, а затем используйте:

ALTER USER usr1 WITH LOGIN = login1;