Я нахожу противоречивую информацию о том, как именно отформатировать имена участников-служб (имена принципов службы), чтобы получить правильные соединения Kerberos, и сколько мне нужно для каждого экземпляра SQL.
Этот документ MS за 2017 год содержит следующее:
Начиная с SQL Server 2008, формат SPN изменяется для поддержки аутентификации Kerberos по TCP / IP, именованным каналам и общей памяти. Поддерживаются следующие форматы SPN для именованных экземпляров и экземпляров по умолчанию.
- Именованный экземпляр:
MSSQLSvc/FQDN:[port|instancename]
- Экземпляр по умолчанию:
MSSQLSvc/FQDN:port|MSSQLSvc/FQDN
Новый формат SPN не требует номера порта . Это означает, что многопортовый сервер или протокол, который не использует номера портов, может использовать аутентификацию Kerberos.
Я взял этот последний абзац, чтобы означать, что мне нужна только одна запись, одна из следующих:
- Именованный экземпляр:
MSSQLSvc/sqlbox1.mydomain.org/instance2
- Экземпляр по умолчанию:
MSSQLSvc/sqlbox1.mydomain.org
Это противоречит этому более раннему (2011 г.) документу MS не только о номере порта, но и о том, какое имя использовать:
Чтобы создать имя участника-службы, вы можете использовать имя NetBIOS или полное доменное имя (FQDN) SQL Server. Однако необходимо создать имя участника-службы как для имени NetBIOS, так и для полного доменного имени .
Когда я смотрю на имена SPN, которые уже существуют в моей среде, я вижу большое количество комбинаций, некоторые серверы имеют до 4 записей:
MSSQLSvc/sqlbox1
MSSQLSvc/sqlbox1:1433
MSSQLSvc/sqlbox1.mydomain.org
MSSQLSvc/sqlbox1.mydomain.org:1433
Кажется, даже собственный менеджер конфигурации Kerberos от MS хочет сгенерировать последние две версии (с соответствующей обфускацией):
Аналогично для существующих именованных экземпляров я вижу странное сочетание, некоторые из которых почти наверняка недействительны:
MSSQLSvc/sqlbox1:1522
MSSQLSvc/sqlbox1:instance2
MSSQLSvc/sqlbox1.mydomain.org:1522
MSSQLSvc/sqlbox1.mydomain.org:instance2
MSSQLSvc/sqlbox1.mydomain.org/instance2
MSSQLSvc/sqlbox1.mydomain.org:1522:instance2
Так как же должны выглядеть мои DSN для экземпляров по умолчанию и именованных экземпляров, если я просто использую TCP в своей среде?
Должен ли я включить порт или нет? Или включить один с портом и один без?
Использовать только полное доменное имя или мне нужны записи только с именем Netbios? Или это было бы, только если бы мы использовали именованные каналы (которые мы не являемся)?
(Для контекста мы запускаем SQL 2005–2014, некоторые кластеризованные, другие автономные. Подключение осуществляется только через TCP, именованные каналы отключены в диспетчере конфигурации. Мы будем исправлять / создавать их вручную, а не позволять учетной записи службы SQL создавать их при запуск сервера.)
источник
Ответы:
Если вы используете только TCP / IP для подключения к своим экземплярам, вам нужны только указанные порты. Имена экземпляров используются при подключении к экземплярам SQL по протоколам именованных каналов. К сожалению, статья MS не дает права сказать, какой формат требуется для какого протокола, но она получена из (многих тестов в моей среде) и следующей статьи MS :
Что касается полных доменных имен против имен NETBIOS, я буду рекомендовать полные доменные имена, поскольку они не так подвержены проблемам, если вы сталкиваетесь со случайными проблемами DNS-сервера.
Сняли с моего блога по этому вопросу, форматы должны выглядеть следующим образом:
Ссылку на источник от MS можно найти здесь .
Теперь, чтобы сделать ваш день администратора сети (например, конфигурация OU, которая позволяет для самостоятельной регистрации SPN)
Ваш сетевой администратор может создать подразделение в домене, которое содержит все ваши учетные записи службы SQL Server, которые можно настроить таким образом, чтобы учетная запись службы могла создавать имя участника-службы для себя и для себя одного. Метод в основном следующий основан на блоге Райана Рейса , но имеет некоторые незначительные изменения, так что чрезмерные гранты не выполняются.
Этот процесс описывает создание OU в домене, который позволяет учетным записям в нем самостоятельно регистрировать свои собственные SPN:
После выполнения описанных выше действий соответствующий контейнер OU теперь настроен так, что любая добавленная в него учетная запись сможет регистрировать и удалять имена участников-служб для себя и для себя. Это точно правильное количество разрешений, поскольку эти учетные записи не смогут вытеснить имена участников-служб, зарегистрированные другими учетными записями.
Цель перезапуска SQL Server на шаге 16 - убедиться, что имена участников-служб зарегистрированы должным образом. SQL попытается удалить все зарегистрированные имена участников-служб при завершении работы и добавить их при запуске, поэтому перезапуск действительно нужен только в том случае, если в данный момент не существует имен SPN для указанной службы SQL Server.
Последнее замечание по этому подходу заключается в том, что, если вы запускаете SQL Server в традиционной конфигурации Failover Clustered Instance (FCI), НЕ рекомендуется добавлять учетную запись службы этого экземпляра в это подразделение на каждые 2443457 КБ. .
Мне действительно нужно опубликовать часть 2 моей серии Kerberos ...
источник
Когда служба SQL Server создает имя участника-службы, она создает два для каждого экземпляра. Это формат, который он использует.
Экземпляр по умолчанию:
Именованный экземпляр:
Для именованных экземпляров, если вы создаете SPN вручную, вам потребуется статический порт вместо динамического порта по умолчанию.
источник