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

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

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

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

6 ответов

Решение

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

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

или же

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

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

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

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

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

--ПРИМЕЧАНИЕ: используйте-> master..syslogins.sid = sysusers.sid в sql2000

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

ALTER USER usr1 WITH LOGIN = login1;
Другие вопросы по тегам