Зеркальные базы данных MS SQL 2012 - несоответствие SID, вызывающее сбой соединения при сбое - PullRequest
0 голосов
/ 14 марта 2019

У меня есть несколько зеркальных баз данных SQL Server 2012, в которых в случае сбоя к вторичному соединению происходит сбой соединения с базой данных.Необходимо запустить alter user для пользователя / базы данных, чтобы он заработал, что действительно ограничивает полезность автоматического переключения при сбое.Я понимаю, что это потому, что SID для входа / пользователя не совпадают на первичном и вторичном.

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

Допустим, логин / пользователь - 'dbuser'.

Шаг 1: из основного (получить SID для dbuser):

use master
select name, sid from sys.sql_logins
where name='dbuser'

Шаг 2: на вторичном сервере (используя SID из шага 1):

DROP LOGIN dbuser
CREATE Login dbuser WITH password=[my password], SID=[SID from step 1]

Шаг 3: аварийное переключение на вторичный сервер

Шаг 4: для каждой базы данных на вторичном компьютере

USE [database]
GO
ALTER USER dbuser with login=dbuser
GO

Я думаю, что на шаге 4 следует согласовать user dbuser SID с недавно созданным login dbuser SID, все из которых теперь будут соответствовать SID наосновной, и с этого момента отработки отказа должны работать без необходимости изменять пользователя.

Я видел это утверждение:

Если вы удалите имя входа, в котором пользователи базы данных сопоставлены сэто, пользователи будут осиротевшими в SQL Server.

Так что это ключевой вопрос, который я думаю: шаг 4 лишит пользователя права голоса?

1 Ответ

1 голос
/ 14 марта 2019

Короче говоря, да, это будет работать.Хотя я бы сказал, что шаг 4 должен быть ненужным.

Немного более длинный ответ: «осиротевший пользователь» означает «пользователь, чей SID не имеет логина с совпадающим SID».Когда вы явно создаете логин с помощью SID, вы гарантируете соответствие.Я использую тот же подход с группами доступности.

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

Прошло много времени с тех пор, как я занимался зеркалированием, но я, кажется, вспоминаю, что вы можете сделать снимок базы данных, чтобы создать читаемую копиюзеркальная база данных.Я бы посоветовал вам сделать это и попытаться войти с вашим пользователем;лучшая гарантия того, что что-то работает, - это продемонстрировать.

...