У меня есть несколько зеркальных баз данных 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 лишит пользователя права голоса?