次の方法で共有


Kerberos 接続のサービス プリンシパル名を登録する

SQL Server で Kerberos 認証を使用するには、次の両方の条件が満たされている必要があります。

  • クライアント コンピューターとサーバー コンピューターが、同じ Windows ドメインまたは信頼関係のあるドメインの一部であることが必要です。

  • SPN (サービス プリンシパル名) は、Windows ドメインのキー配布センターの役割を担う Active Directory に登録されることが必要です。 SPN は、登録後に、SQL Server インスタンス サービスを開始した Windows アカウントにマップされます。 SPN 登録が実行されていないか失敗した場合、Windows セキュリティレイヤーは SPN に関連付けられているアカウントを特定できず、Kerberos 認証は使用されません。

    サーバーが SPN を自動的に登録できない場合は、SPN を手動で登録する必要があります。 「 SPN の手動登録」を参照してください。

接続で Kerberos が使用されていることを確認するには、sys.dm_exec_connections動的管理ビューに対してクエリを実行します。 次のクエリを実行し、auth_scheme列の値を確認します。Kerberos が有効な場合は "KERBEROS" になります。

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid ;  

ヒント

Microsoft Kerberos Configuration Manager for SQL Server は、 SQL Serverと Kerberos に関する接続性の問題のトラブルシューティングに役立つ診断ツールです。 Kerberos 認証の詳細については、「 Microsoft® Kerberos Configuration Manager for SQL Server®」をご覧ください。

認証での SPN の役割

アプリケーションによって接続が開かれ、Windows 認証が使用されると、SQL Server Native Client により、SQL Server コンピューター名、インスタンス名、およびオプションで SPN が渡されます。 接続が SPN に合格した場合は、変更なしで使用されます。

接続が SPN を渡さない場合、使用されるプロトコル、サーバー名、およびインスタンス名に基づいて既定の SPN が構築されます。

前の両方のシナリオでは、SPN はキー配布センターに送信され、接続認証のためのセキュリティ トークンを取得します。 セキュリティ トークンを取得できない場合、認証では NTLM が使用されます。

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

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

Windows 認証は、SQL Server を認証する場合にお勧めする方法です。 Windows 認証を使用するクライアントは、NTLM または Kerberos を使用して認証されます。 Active Directory 環境では、常に Kerberos 認証が最初に試みられます。 名前付きパイプを使用する SQL Server 2005 クライアントでは、Kerberos 認証を使用できません。

権限

データベース エンジン サービスが起動すると、サービス プリンシパル名 (SPN) の登録が試みられます。 SQL Server を起動するアカウントに Active Directory Domain Services に SPN を登録するアクセス許可がない場合、この呼び出しは失敗し、警告メッセージがアプリケーション イベント ログと SQL Server エラー ログに記録されます。 SPN を登録するには、データベース エンジンが、ローカル システム (推奨されていない) などの組み込みアカウント、または NETWORK SERVICE、またはドメイン管理者アカウントなどの SPN を登録するアクセス許可を持つアカウントで実行されている必要があります。 SQL Server が Windows 7 または Windows Server 2008 R2 オペレーティング システムで実行されている場合は、仮想アカウントまたはマネージド サービス アカウント (MSA) を使用して SQL Server を実行できます。 仮想アカウントと MSA の両方で SPN を登録できます。 SQL Server がこれらのアカウントのいずれかで実行されていない場合、SPN は起動時に登録されず、ドメイン管理者は SPN を手動で登録する必要があります。

Windows ドメインが Windows Server 2008 R2 Windows Server 2008 R2 機能レベル未満で実行されるように構成されている場合、マネージド サービス アカウントには、SQL Server データベース エンジン サービスの SPN を登録するために必要なアクセス許可がありません。 Kerberos 認証が必要な場合、ドメイン管理者はマネージド サービス アカウントに SQL Server SPN を手動で登録する必要があります。

KB 記事「 SQL Server で Kerberos 認証を使用する方法」には、ドメイン管理者ではないアカウントに対して SPN に読み取りまたは書き込みアクセス許可を付与する方法に関する情報が含まれています。

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

SPN 形式

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

名前付きインスタンス

  • MSSQLSvc/FQDN:[port|instancename], where:

    • 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 サポート ツール の KB 記事を参照してください。

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

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

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:instancename accountname  

クライアント接続

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

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

サービス アカウントを SPN として使用する

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

  • ドメイン ユーザー アカウントの形式: username@domain または domain\username

  • machine$@domain または host\FQDN (ローカル システムや NETWORK SERVICES など) のコンピューター ドメイン アカウント。

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

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

認証の既定値

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

シナリオ 認証方法
SPN が正しいドメイン アカウント、仮想アカウント、MSA、またはビルトイン アカウントにマップされている場合 たとえば、ローカル システムやネットワーク サービスなどです。

注: 正しいとは、登録済みの SPN によってマップされるアカウントが、SQL Server サービスが実行されているアカウントであることを意味します。
ローカル接続では NTLM が使用され、リモート接続では Kerberos が使用されます。
SPN が正しいドメイン アカウント、仮想アカウント、MSA、またはビルトイン アカウントである場合

注: 正しいとは、登録済みの SPN によってマップされるアカウントが、SQL Server サービスが実行されているアカウントであることを意味します。
ローカル接続では NTLM が使用され、リモート接続では Kerberos が使用されます。
SPN が正しくないドメイン アカウント、仮想アカウント、MSA、またはビルトイン アカウントにマップされている場合 認証は失敗します。
SPN 参照が失敗するか、正しいドメイン アカウント、仮想アカウント、MSA、または組み込みアカウントにマップされていないか、正しいドメイン アカウント、仮想アカウント、MSA、または組み込みアカウントではありません。 ローカル接続とリモート接続で NTLM が使用されます。

コメント

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

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

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

こちらもご覧ください

クライアント接続でのサービス プリンシパル名 (SPN) のサポート
クライアント接続でのサービス プリンシパル名 (SPN) (OLE DB)
クライアント接続におけるサービス プリンシパル名 (SPN) (ODBC)
SQL Server Native Client の機能
Reporting Services 環境における Kerberos 認証の問題の管理