SQL ServerでSPNが登録できないというエラーが出た場合の対処法

SQLのエラーログを確認していると,以下のようなエラーが出力されている場合があります

2018-01-01 09:00:00.00 Server      SQL Server is attempting to register a Service Principal Name (SPN) for the SQL Server service. Kerberos authentication will not be possible until a SPN is registered for the SQL Server service. This is an informational message. No user action is required.

2018-01-01 09:00:00.00 Server      The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ MSSQLSvc/SQLServerName.domain ] for the SQL Server service. Windows return code: 0xffffffff, state: 43. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.

2018-01-01 09:00:00.00 Server      The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ MSSQLSvc/SQLServerName.domain:1433 ] for the SQL Server service. Windows return code: 0xffffffff, state: 43. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.

Windows return codeの16進数は,環境によって異なるかも知れませんが,基本的には同じエラーです。

ログの内容からすると,SQL Serverの起動時にSPNを登録できなかったというエラーのようです。SPNが登録できないので,Kerberos認証が無効化されます,とも言っています。

ドメイン認証の基盤であるKerberosが有効化されていないという事になればちょっと問題です。NTLM認証だけで本当にSQL Serverは正常に動くのだろうか,と疑問に思うかもしれません。

SPNが登録できないというエラーの原因

では,何がこのエラーの直接の原因なのでしょうか。そして解決策はあるのでしょうか。

まず,このエラーが,Informationalレベルのメッセージであることは注目できます。そこまで深刻なエラーではないということです。

そして,2つの原因が考えられます。

1.ドメインアカウントに対して権限がない

SQLを実行しているサービスアカウントがドメインアカウントである場合,そのアカウントのSPNのプロパティを更新する権限が必要です。

それで,もし自動的にSPNを登録させたいのであれば,アカウントに対して,SELFユーザーに編集権限を付けてやりましょう。

2.手動でSPNを登録している場合

手動でSPNを登録しているにも関わらず,このエラーが出る場合に,不思議に思うでしょう。なぜ,SPNをアカウントに対してすでに登録しているにも関わらず,SPNの登録に失敗したというエラーが出るのでしょうか。

実は,SPNがすでに正常に登録されているかどうかに関わらず,アカウントに対する書き込み権限がない場合,このエラーは出てしまいます。このエラーがInformationalレベルであるのは,そういう理由です。

Kerberosが有効になっているかどうかを確認する方法

では,本当にKerberosが有効になっているかどうかは,どうやって確認したらよいでしょうか。

そのためには,以下のクエリをSQLサーバーに対して投げてみます。

[sql]
SELECT * FROM sys.dm_exec_connections
[/sql]

すると,auth_schemeという列で,現在のセッションに対する認証方法を確認することができます。

auth_schemeでKeroberosが使われているかどうかを確認できる

auth_schemeでKeroberosが使われているかどうかを確認できる


ちなみに,SQLサーバー自身の上で上記のクエリを投げた場合,現在のセッションはNTLM認証になります。これは仕様です。

リモートからSQLに対して接続した場合には,自分のセッションはKerberosになるでしょう。

このようにして,SQL Serverが正しくKerberos認証を受け付けているかどうかを確認することができます。

ですので,SPNが登録できないというエラーログは,実際には問題がないということが証明できます。

もしどうしてもエラーを解消したいということであれば,アカウントに対して,SELFユーザーに編集権限をつけてあげるしかありません。

以上,SQL ServerでSPNが登録できないというエラーが出た場合の対処法でした。

コメント