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 (чтобы один и тот же скрипт выполнялся на всех серверах), но я оставляю это в качестве упражнения для читателя.:)

Другие вопросы по тегам