クライアント接続でのサービス プリンシパル名 (SPN) のサポート

適用対象:yesSQL Server (サポートされているすべてのバージョン)

DownloadOLE DB ドライバーのダウンロード

SQL Server 2008 以降では、すべてのプロトコルで相互認証を可能にするために、サービスプリンシパル名 (spn) のサポートが拡張されています。 以前のバージョンの SQL Server では、SQL Server インスタンスの既定の spn が Active Directory に登録されている場合、spn は Kerberos over TCP に対してのみサポートされていました。

spn は、SQL Server インスタンスを実行するアカウントを決定するために、認証プロトコルによって使用されます。 インスタンスのアカウントが判明した場合は、Kerberos 認証を使用したクライアントとサーバーによる相互認証が可能となります。 インスタンスのアカウントが不明である場合は、NTLM 認証を使用して、サーバーによるクライアントの認証のみが行われます。 現在、OLE DB Driver for SQL Server で、この認証を参照して、インスタンス名とネットワーク接続のプロパティから SPN が生成されています。 SQL Server インスタンスは、起動時に spn を登録しようとします。または、手動で登録することもできます。 ただし、SPN を登録するアカウントのアクセス権が不十分である場合は、登録が失敗します。

ドメインおよびコンピューター アカウントは、自動的に Active Directory に登録されます。 これらのアカウントを SPN として使用することも、管理者が独自に SPN を定義することもできます。 SQL Server では、使用する SPN をクライアントが直接指定できるようにすることで、セキュリティで保護された認証の管理性と信頼性が向上します。

Note

クライアント アプリケーションで指定された SPN は、Windows 統合セキュリティを使用して接続されている場合にのみ使用されます。

ヒント

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

Kerberos の詳細については、次の記事を参照してください。

使用法

次の表では、セキュリティで保護された認証をクライアント アプリケーションで使用するための、最も一般的なシナリオについて説明します。

シナリオ 説明
レガシ アプリケーションで SPN が指定されない。 この互換性のシナリオでは、以前のバージョンの SQL Server 用に開発されたアプリケーションの動作が変更されないことを保証します。 SPN が指定されていない場合、アプリケーションは生成された SPN を使用し、どの認証方法が使用されるかは認識しません。
現在のバージョンの OLE DB Driver for SQL Server を使用するクライアント アプリケーションで、接続文字列に含まれる SPN が、ドメイン ユーザー アカウント、コンピューター アカウント、インスタンス固有の SPN、またはユーザー定義文字列として指定される。 プロバイダー、初期化、または接続文字列で ServerSPN キーワードを使用して、次の値を指定できます。

-SQL Server インスタンスが接続に使用するアカウントを指定します。 この設定により、Kerberos 認証へのアクセスが簡単になります。 Kerberos キー配布センター (KDC) が存在し、かつ正しいアカウントが指定された場合は、NTLM よりも Kerberos 認証が使用される可能性が高くなります。 KDC は、通常、ドメイン コントローラーと同じコンピューター上にあります。

-SQL Server インスタンスのサービスアカウントを参照する SPN を指定します。 SQL Server インスタンスごとに、この目的で使用できる既定の spn が2つ生成されます。 ただし、これらのキーが Active Directory に存在することは保証されないため、この状況では Kerberos 認証は保証されません。

-SQL Server インスタンスのサービスアカウントを検索するために使用する SPN を指定します。 この値は、サービス アカウントにマップされる任意のユーザー定義文字列でかまいません。 この場合は、キーを手動で KDC に登録する必要があり、キーがユーザー定義 SPN の規則を満たしていることも必要です。

FailoverPartnerSPN キーワードを使用すると、フェールオーバー パートナー サーバーの SPN を指定できます。 アカウントおよび Active Directory キーの値の範囲は、プリンシパル サーバーに指定できる値と同じです。
OLE DB アプリケーションで、SPN がプリンシパル サーバーまたはフェールオーバー パートナー サーバーのデータ ソース初期化プロパティとして指定される。 SSPROP_INIT_SERVER_SPN プロパティ セット内の接続プロパティ DBPROPSET_SQLSERVERDBINIT を使用して、接続用の SPN を指定できます。

SSPROP_INIT_FAILOVER_PARTNER_SPN 内の接続プロパティ DBPROPSET_SQLSERVERDBINIT を使用して、フェールオーバー パートナー サーバーの SPN を指定できます。
ユーザーが、サーバーまたはフェールオーバー パートナー サーバーの SPN を、OLE DB の [データ リンク] または [ログイン] ダイアログ ボックスで指定する。 SPN は、 [データ リンク] または [ログイン] ダイアログ ボックスで指定できます。
OLE DB アプリケーションで、接続の確立に使用された認証方法が特定される。 接続が正常に開いている場合、アプリケーションでは SSPROP_AUTHENTICATION_METHOD プロパティ セット内の接続プロパティ DBPROPSET_SQLSERVERDATASOURCEINFO をクエリして、使用された認証方法を特定できます。 値には NTLMKerberos がありますが、その他の値もあります。

[フェールオーバー]

SPN はフェールオーバー キャッシュに保存されないため、接続間で受け渡すことができません。 接続文字列または接続属性に SPN が指定されると、プリンシパルおよびパートナーへの接続が試行されるたびに SPN が使用されます。

接続のプール

SPN をすべての文字列ではなく一部の接続文字列で指定すると、プールが断片化する原因となることがあるので、アプリケーションでは注意が必要です。

アプリケーションでは、接続文字列キーワードを指定する代わりに、プログラムによって SPN を接続属性として指定できます。 この方法は、接続プールの断片化を管理するうえで役立ちます。

接続文字列内の SPN は対応する接続属性を設定することでオーバーライドできますが、接続のプールで使用される接続文字列は、プールの目的で接続文字列値を使用するので、アプリケーションでは注意が必要です。

下位サーバーの動作

新しい接続動作は、クライアントによって実装されます。そのため、SQL Server のバージョンに固有ではありません。

リンク サーバーと委任

リンクサーバーを作成すると、 sp_addlinkedserver@provstrパラメーターを使用して、サーバーおよびフェールオーバーパートナーの spn を指定できます。 この方法を実行するメリットは、クライアント接続文字列で SPN を指定する場合と同じです。つまり、Kerberos 認証を使う接続を確立する方が、よりシンプルでより信頼性が高くなります。

リンク サーバーでの委任には、Kerberos 認証が必要です。

アプリケーションによって指定される SPN の管理上の考慮事項

SPN をアプリケーションで接続文字列を通じて指定するか、プログラムで接続プロパティを通じて指定するか (プロバイダーが生成した既定の SPN を使用しない) を選択する際には、次の事項を検討してください。

  • セキュリティ: 指定した SPN から、保護されている情報が明らかになりますか?

  • 信頼性: 既定の spn を使用できるようにするには、SQL Server インスタンスを実行するサービスアカウントに、KDC 上の Active Directory を更新するための十分な特権が必要です。

  • 利便性と場所の透過性: データベースを別の SQL Server インスタンスに移動した場合、アプリケーションの spn はどのように影響を受けますか。 データベース ミラーリングを使用する場合は、プリンシパル サーバーとそのフェールオーバー パートナーの両方に、この概念が適用されます。 また、サーバーの変更に伴って SPN を変更する場合のアプリケーションに対する影響や、 すべての変更に関する管理の有無についても検討してください。

SPN の指定

SPN は、ダイアログ ボックスおよびコードで指定できます。 ここでは、SPN を指定する方法について説明します。

SPN の最大長は 260 文字です。

接続文字列または接続属性で SPN に使用される構文は次のとおりです。

構文 説明
MSSQLSvc/fqdn TCP 以外のプロトコルが使用される場合に、既定のインスタンスに対してプロバイダーが生成する既定の SPN。

fqdn は完全修飾ドメイン名です。
MSSQLSvc/fqdn:port TCP が使用される場合にプロバイダーが生成する既定の SPN。

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

InstanceNameは SQL Server インスタンス名です。
HOST/fqdn

HOST/MachineName
Windows で自動的に登録されるビルトイン コンピューター アカウントにマップされる SPN。
ユーザー名ドメイン ドメイン アカウントの直接指定。

Username は、Windows ユーザー アカウントの名前です。

Domain は、Windows ドメイン名または完全修飾ドメイン名です。
MachineNameドメイン コンピューター アカウントの直接指定。

(接続しているサーバーがローカル システムアカウントまたは NETWORK SERVICE アカウントで実行されている場合、Kerberos 認証を取得するために 、ServerSPN は MachineName 内に 置く可能性がありますドメイン 形式。)
KDCKeyMachinename ユーザー指定の SPN。

KDCKey は、KDC キーの規則に従っている英数字の文字列です。

SPN をサポートする OLE DB の構文

構文固有の情報については、次の記事を参照してください。

参照

OLE DB Driver for SQL Server の機能
Kerberos 接続用のサービス プリンシパル名の登録