В SQL Server, как мне создать логин для существующего пользователя?


17

Я восстановил базу данных с одного экземпляра SQL Server на другой экземпляр SQL Server. В базу данных уже добавлены пользователи. Но у них нет логина для нового экземпляра SQL Server.

Я знаю, как создавать новые учетные записи для новых пользователей, но как мне создать учетные записи для существующих пользователей?

Ответы:


9

Проблема в том, что восстановление возвращает пользователей БД из исходного экземпляра сервера, но новый экземпляр обычно ничего не знает об этих именах пользователей. Вы увидите их в разделе «Безопасность» на уровне базы данных, но у них нет соответствующих имен входа на уровне сервера.

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

Есть несколько способов сделать это:

  1. Создайте для них новые логины на новом экземпляре. Затем вам нужно будет удалить их как пользователей базы данных в новом экземпляре и добавить их новые имена входа. Это кажется странным, учитывая, что вы можете создать те же имена для входа, но SID (идентификаторы безопасности) будут другими, и именно это SQL использует для идентификации пользователя. Это достаточно просто для одного или двух входов.

  2. Если вы хотите поддерживать одинаковых пользователей с одинаковыми SID в разных экземплярах, используйте хранимую процедуру sp_help_revlogin . Скопируйте код по ссылке, которая создаст необходимые хранимые процедуры, и запустите его на сервере, с которого вы хотите скопировать пользователей. Он сгенерирует SQL-скрипт, который вы сможете запустить на целевом сервере, чтобы создать тех же пользователей, которые переносят SID, пароли и все остальное. Этот способ можно использовать, если у вас много пользователей баз данных, которым необходимо повторно подключиться к целевому экземпляру, или если вы не знаете паролей к одному или нескольким логинам SQL на исходном экземпляре.


10

Я всегда запускаю команду sp_change_users_login с действием «Update_One», чтобы повторно связать пользователя базы данных с именем входа на сервер:

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


Круто, я использовал это: EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';вместо этого. :)
user2173353

Разве это возможно только в том случае, если у вас есть и пользователь базы данных, и логин сервера, но связь между ними нарушена?
Венцзель

2

Вот что я нашел.

По мере того как squillman истекает, пользователи копируются в базу данных, а логины - нет. Существует магазинная процедура под названием sp_change_users_login, которую можно использовать для решения проблемы. Шаги для этого подробно описаны в этой статье . Подробности использования магазина можно найти на этой странице .


2

Начиная с 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.