Як створити логін для існуючого користувача на SQL Server?


17

Я відновив базу даних з одного екземпляра SQL Server в інший екземпляр SQL Server. У базі даних вже додані користувачі. Але вони не мають входу для нового екземпляра SQL Server.

Я знаю, як створити нові входи для нових користувачів, але як створити логін для існуючих користувачів?

Відповіді:


9

Проблема полягає в тому, що відновлення повертає користувачів db з оригінального екземпляра сервера, але новий екземпляр зазвичай нічого не знає про ці входи користувачів. Ви побачите їх у розділі Безпека на рівні db, але вони не мають відповідних входів на рівні сервера.

Потрібно повторно прив’язати користувачів бази даних до входу на сервер на екземпляр, на якому ви відновили базу даних.

Є кілька способів зробити це:

  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';натомість. :)
користувач2173353

Хіба це не можливо зробити лише в тому випадку, якщо у вас є і користувач бази даних, і логін сервера, але зв’язок між ними порушений?
wenzzzel

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.