Назад | Перейти на главную страницу

SQL Server 2012 Группы доступности AlwaysOn Сбой входа в систему при переключении между узлами

Я настраиваю кластер с 3 узлами как часть группы доступности.

Первоначально я тестировал переключение между узлами с помощью SQL Management Studio, и все прошло успешно, когда я остановил узел, и я все еще мог писать запросы.

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

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