SQL Server 2012 AlwaysOn Группы доступности Сбой входа в систему сервера при переключении между узлами
Я настраиваю кластер с 3 узлами как часть группы доступности.
Первоначально я проверил отработку отказа между узлами с помощью SQL Management Studio, и все успешно завершилось, когда я остановил узел, и я все еще мог писать запросы.
Я начал тестировать с приложением, которое подключается с использованием пользователя SQL, и всякий раз, когда я переключал узлы, я получал неудачный вход в систему.
Я полагаю, что причиной этой проблемы является то, что SID логинов сервера, которые связаны с базой данных, отличаются от логинов сервера на других узлах, которые привели к ошибке входа в систему. Пожалуйста, поправьте меня, если я не правильно понимаю.
Если я правильно понимаю, как я могу убедиться, что SID логинов сервера одинаковы между узлами? Есть ли способ скопировать это или как это сделать?
Я прочитал немного о изолированных базах данных, где я мог просто установить логин для самой базы данных вместо создания логина на сервере, но я бы не стал идти по этому пути.
1 ответ
Ваша интуиция, скорее всего, верна. Вы можете проверить, что SID отличаются между вашими узлами, выполнив:
select name, sid from sys.server_principals
на каждом узле и сравнивая их.
Что касается того, как вы должны поддерживать их синхронизацию, делайте это во время создания (к сожалению, я не знаю способа изменить SID постфактум). Это create login
В операторе есть необязательное условие для предоставления SID. Так что я бы сделал это:
-- on node 1
create login [foobar] with password = 'str0ngp@ssword!';
select sid from sys.server_principals where name = 'foobar';
-- on subsequent nodes
create login [foobar] with password = 'str0ngp@ssword!', sid = <the sid you obtained from node 1>;
Я сделал это для того, чтобы сгенерировать свой собственный SID и передать его даже для узла 1 (чтобы один и тот же скрипт выполнялся на всех серверах), но я оставляю это в качестве упражнения для читателя.:)