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

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

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

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

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

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

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

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

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

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

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

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

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

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