Windows Server 2008 R2。
SQL Server 2008 R2がインストールされています。
MSSQLサービスはローカルシステムとして実行されます。
サーバーのFQDNはSQL01.domain.comです。
SQL01は、domain.comという名前のActive Directoryドメインに参加しています。
次に、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は、ローカルシステムアカウントを使用するのに適しているようです。サーバーがクラスター内にないか、CNAMEを使用していません。
これは、SQL Serverをホストしていたのと同じサーバーからローカルでSQL Serverに接続していたためです。ネットワーク上の別のマシンから接続すると、期待どおりに、使用される認証メカニズムはKerberosになります。
ローカルに接続する場合、SQL Serverは常にNTLMを使用します。 Kerberosは、リモートで接続する場合にのみ使用されます。
SQL Server Protocols Blog からのこの投稿は、日付が付けられていますが、同じことを言っています。
1)SPNが存在する場合、TCP/IP経由でリモート接続を行うときにKerberosが使用されます。
2)SPNが存在する場合、XPでローカルTCP接続を行うときにKerberosが使用されます。
3)WIN 2K3でローカル接続を行うときにNTLMが使用されます。
4)NTLMはNP接続で使用されます。
5)NTLMは、SPNが見つからない場合、TCP接続で使用されます。