
Windows Server 2008 R2.
Установлен SQL Server 2008 R2.
Служба MSSQL работает как локальная система.
Полное доменное имя сервера — SQL01.domain.com.
SQL01 присоединен к домену Active Directory с именем domain.com.
Ниже приведен вывод setspn:
C:\> setspn -L sql01
...
MSSQLSvc/SQL01.domain.com:1433
MSSQLSvc/SQL01.domain.com
WSMAN/SQL01.domain.com
WSMAN/SQL01
TERMSRV/SQL01.domain.com
TERMSRV/SQL01
RestrictedKrbHost/SQL01
RestrictedKrbHost/SQL01.domain.com
HOST/SQL01.domain.com
HOST/SQL01
Затем я запускаю SQL Server Management Studio и подключаюсь к SQL01 следующим образом:
Затем я запускаю следующий запрос:
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid
И результат — NTLM. Почему результат не Kerberos? SPN-имена, похоже, верны для использования учетной записи Local System. Сервер не находится в кластере и не использует CNAME.
решение1
Это потому, что я подключался к SQL Server локально, с того же сервера, на котором размещался SQL Server. Когда я подключаюсь с другой машины в сети, механизм аутентификации, как и ожидалось, — Kerberos.
SQL Server всегда будет использовать NTLM при локальном подключении. Kerberos используется только при удаленном подключении.
Этот пост изБлог протоколов SQL Server, хотя и устарело, говорит то же самое:
1) Kerberos используется при установлении удаленного соединения по TCP/IP, если присутствует SPN.
2) Kerberos используется при создании локального TCP-соединения на XP, если присутствует SPN.
3) NTLM используется при локальном подключении на WIN 2K3.
4) NTLM используется поверх NP-соединения.
5) Если SPN не найден, используется NTLM через TCP-соединение.