サービス プリンシパル名の登録

サービス プリンシパル名 (SPN) は、クライアントがサービスのインスタンスを一意に識別するための名前です。Kerberos 認証サービスでは、SPN を使用してサービスが認証されます。クライアントがサービスに接続するときに、サービスのインスタンスが検索され、そのインスタンスの SPN が構成されます。次に、サービスに接続され、認証のためにサービスの SPN が提示されます。

注意

このトピックで提供する情報は、クラスタリングを使用する SQL Server 構成にも適用されます。

Windows 認証は、ユーザーが SQL Server に対して認証を行う際に推奨される方法です。Windows 認証を使用するクライアントは、NTLM または Kerberos を使用して認証されます。Active Directory 環境では、常に Kerberos 認証が最初に試行されます。Kerberos 認証は、名前付きパイプを使用する SQL Server 2000 クライアントと SQL Server 2005 クライアントでは使用できません。

権限

データベース エンジン サービスが開始されると、サービス プリンシパル名 (SPN) の登録が試行されます。SQL Server を起動したアカウントに Active Directory ドメイン サービスで SPN を登録する権限がない場合、この呼び出しは失敗し、アプリケーション イベント ログと SQL Server エラー ログに警告メッセージが記録されます。SPN を登録するには、Local System (非推奨) や NETWORK SERVICE などのビルトイン アカウントか、SPN を登録する権限を持つアカウント (ドメイン管理者アカウントなど) でデータベース エンジンが実行されている必要があります。SQL Server がこのいずれかのアカウントで実行されていない場合、SPN は起動時には登録されず、ドメイン管理者が SPN を手動で登録する必要があります。

ドメイン管理者ではないアカウントに SPN に対する読み取り権限または書き込み権限を許可する方法については、サポート技術情報の資料「SQL Server で Kerberos 認証を使用する方法」を参照してください。

追加情報については、「SQL Server 2008 で Kerberos の制約付き委任を実装する方法」を参照してください。

SPN の形式

SQL Server 2008 以降では、TCP/IP、名前付きパイプ、および共有メモリで Kerberos 認証をサポートするために、SPN の形式が変更されています。名前付きインスタンスおよび既定のインスタンスでサポートされている SPN の形式は次のとおりです。

名前付きインスタンス

  • MSSQLSvc/FQDN:[port**|**instancename]

    • MSSQLSvc は、登録されるサービスです。

    • FQDN は、サーバーの完全修飾ドメイン名です。

    • port は、TCP ポート番号です。

    • instancename は、SQL Server インスタンスの名前です。

既定のインスタンス

  • MSSQLSvc/FQDN:port**|**MSSQLSvc/FQDN

    • MSSQLSvc は、登録されるサービスです。

    • FQDN は、サーバーの完全修飾ドメイン名です。

    • port は、TCP ポート番号です。

新しい SPN の形式では、ポート番号は必要ありません。つまり、複数ポートのサーバーまたはポート番号を使用しないプロトコルで Kerberos を使用できます。

注意

TCP ポートが SPN に含まれている TCP/IP 接続の場合、SQL Server では、Kerberos 認証を使用して接続するユーザー用に TCP プロトコルを有効にする必要があります。

MSSQLSvc/fqdn:port

TCP が使用される場合にプロバイダーが生成する既定の SPN。port は TCP ポート番号です。

MSSQLSvc/fqdn

TCP 以外のプロトコルが使用される場合に、既定のインスタンスに対してプロバイダーが生成する既定の SPN。fqdn は完全修飾ドメイン名です。

MSSQLSvc/fqdn:InstanceName

TCP 以外のプロトコルが使用される場合に、名前付きインスタンスに対してプロバイダーが生成する既定の SPN。InstanceName は SQL Server インスタンスの名前です。

SPN の自動登録

SQL Server データベース エンジン のインスタンスが開始すると、SQL Server は SQL Server サービスに対する SPN の登録を試みます。インスタンスが停止すると、SQL Server は SPN の登録解除を試みます。TCP/IP 接続の場合、SPN は MSSQLSvc/<FQDN>:<tcpport> という形式で登録されます。名前付きインスタンスと既定のインスタンスは、どちらも MSSQLSvc として登録され、インスタンスの区別は <tcpport> の値で行われます。

Kerberos をサポートするその他の接続の場合、名前付きインスタンスの SPN は MSSQLSvc/<FQDN>:<instancename> という形式で登録されます。既定のインスタンスを登録する場合の形式は、MSSQLSvc/<FQDN> です。

SPN の登録または登録解除に必要な権限がサービス アカウントにない場合は、これらのアクションを手動で実行することが必要になる場合があります。

SPN の手動登録

SPN を手動で登録するには、管理者は Microsoft Windows Server 2003 サポート ツールに付属する Setspn.exe ツールを使用する必要があります。サポート ツールは Windows Server 2003 Service Pack 1 (SP1) に含まれています。詳細については、サポート技術情報の資料「Windows Server 2003 Service Pack 1 のサポート ツール」を参照してください。

Setspn.exe は、サービス プリンシパル名 (SPN) ディレクトリ プロパティの読み取り、変更、および削除を実行できるようにするコマンド ライン ツールです。このツールを使用すると、現在の SPN の表示、アカウントの既定の SPN の再設定、および補足 SPN の追加または削除も実行できます。

TCP/IP 接続の場合に SPN を手動で登録するために使用される構文例を次に示します。

setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname

setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname

   SPN が既に存在する場合は、再登録する前に削除する必要があります。削除するには、-D スイッチを指定して setspn コマンドを使用します。次の例は、新しいインスタンス ベースの SPN を手動で登録する方法を示しています。既定のインスタンスの場合は、次の構文を使用します。

setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname

setspn -A MSSQLSvc/myhost.redmond.microsoft.com accountname

名前付きインスタンスの場合は、次の構文を使用します。

setspn -A MSSQLSvc/myhost.redmond.microsoft.com:instancename accountname

setspn -A MSSQLSvc/myhost.redmond.microsoft.com:instancename accountname

クライアント接続

クライアント ドライバーでは、ユーザー指定の SPN がサポートされています。ただし、SPN を指定しない場合は、クライアント接続の種類に基づいて SPN が自動的に生成されます。TCP 接続の場合は、名前付きインスタンスと既定のインスタンスの両方で、MSSQLSvc/FQDN:[port] という形式の SPN が使用されます。

名前付きパイプおよび共有メモリ接続の場合は、名前付きインスタンスでは MSSQLSvc/FQDN:instancename、既定のインスタンスでは MSSQLSvc/FQDN という形式の SPN が使用されます。

SPN としてのサービス アカウントの使用

サービス アカウントを SPN として使用できます。サービス アカウントは、Kerberos 認証の接続属性を使用して次の形式で指定します。

  • username@domain または domain\username (ドメイン ユーザー アカウントの場合)

  • machine$@domain または host\FQDN (Local System や NETWORK SERVICES などのコンピューター ドメイン アカウントの場合)

接続の認証方法を確認するには、次のクエリを実行します。

SELECT net_transport, auth_scheme 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;

SELECT net_transport, auth_scheme 
FROM sys.dm_exec_connections 
WHERE session_id = @@SPID;

認証の既定

次の表では、SPN の登録シナリオに基づいて使用される認証の既定について説明します。

シナリオ

認証方法

SPN が正しいドメインまたはビルトイン アカウントにマップされている場合 (ローカル システムや NETWORK SERVICE など)

注意
"正しい" とは、登録される SPN によってマップされているアカウントが SQL Server サービスを実行しているアカウントであるという意味です。

ローカル接続では NTLM が使用され、リモート接続では Kerberos が使用されます。

SPN が正しいドメインまたはビルトイン アカウントである場合

注意
"正しい" とは、登録される SPN によってマップされているアカウントが SQL Server サービスを実行しているアカウントであるという意味です。

ローカル接続では NTLM が使用され、リモート接続では Kerberos が使用されます。

SPN が正しくないドメインまたはビルトイン アカウントにマップされている場合

認証は失敗します。

SPN 参照が失敗したか、正しいドメインまたはビルトイン アカウントにマップされていないか、正しいドメインまたはビルトイン アカウントではない場合

ローカル接続とリモート接続で NTLM が使用されます。

コメント

SQL Server 2008 の専用管理者接続 (DAC) では、インスタンス名ベースの SPN が使用されます。その SPN が正常に登録されると、Kerberos 認証を DAC で使用できるようになります。また、ユーザーがアカウント名を SPN として指定することもできます。

起動中に SPN の登録が失敗した場合は、この失敗が SQL Server のエラー ログに記録されて、起動が続行されます。

シャットダウン中に SPN の登録解除が失敗した場合は、この失敗が SQL Server のエラー ログに記録されて、シャットダウンが続行されます。