SQL Server フェールオーバー クラスタで Kerberos 認証を有効にする方法

更新 : 2007 年 9 月 15 日

Kerberos は、クライアント/サーバー アプリケーションで強力な認証を行うためにデザインされたネットワーク認証プロトコルです。企業全体のネットワーク認証のセキュリティを強化すると同時に、相互運用性の基盤となるプロトコルです。

Kerberos 認証は、スタンドアロンの Microsoft SQL Server 2005 インスタンス、または Microsoft Windows 2000 Service Pack 3 (SP3) で実行されるフェールオーバー クラスタ インスタンスに対して使用できます。SQL Server 2005 では、一般的な Microsoft Windows 2000 Active Directory ドメイン構成の一部としてこの機能がサポートされます。

SQL Server が依存しているネットワーク名リソースが Windows 2000 ベースのクラスタに存在する場合、そのリソースに対して Kerberos 認証を使用するにはコンピュータを Windows 2000 SP3 にアップグレードします。サーバー クラスタで Kerberos を有効にする場合の追加情報については、サポート技術情報の資料「Windows 2000 ベースのサーバー クラスタでの Kerberos サポート」を参照してください。

ここでは、Microsoft インターネット インフォメーション サービス (IIS) を実行しているサーバーに接続し、SQL Server を実行しているサーバーに Kerberos 接続を確立する方法について説明します。

前提条件

この機能を使用するには、Windows 2000 SP3 を実行している必要があります。

セットアップ手順を実行する前に、Kerbtray ユーティリティと SetSPN ユーティリティをダウンロードします。

  • Kerbtray ユーティリティをダウンロードするには、この Microsoft Web サイトを参照してください。Kerbtray.exe を使用すると、関連する使用中のコンピュータの Kerberos チケットについて、検証や削除を容易に行えます。
  • SetSPN ユーティリティをダウンロードするには、この Microsoft Web サイトを参照してください。

Kerberos を使用するには、SQL Server のクライアントから TCP/IP プロトコルを使用して SQL Server に接続する必要があります。たとえば、クライアントで名前付きパイプ プロトコルを使用する場合、Kerberos は使用されません。コンピュータに複数の SQL Server インスタンスが存在する場合、それぞれのインスタンスで使用される TCP/IP ポートは一意なので、インスタンスごとに SPN (サーバー プリンシパル名) を構成する必要があります。

SQL Server 2005 の Kerberos の有効化

Microsoft インターネット インフォメーション サービスを実行しているサーバーへの接続と SQL Server 2005 への Kerberos 接続の確立

  1. 手順 1: ドメイン コントローラの構成

ドメイン コントローラの [Active Directory ユーザーとコンピュータ] で次の手順を実行します。

  1. 委任を設定するコンピュータ (IIS サービス サーバー) を右クリックし、[コンピュータを委任に対して信頼する] を選択します。SQL Server を実行しているコンピュータへのアクセスが最後になる場合も、そのコンピュータにリンク サーバーがあれば、リンク サーバーにも委任アクセス許可が必要です。このコンピュータがチェーンの最後のコンピュータではない場合、中間にあるすべてのコンピュータを委任に対して信頼する必要があります。
  2. SQL Server サービス アカウントのドメイン ユーザー アカウントに委任アクセス許可を与えます。クラスタ化された SQL Server にはドメイン ユーザー アカウントが必要です (ローカル システム アカウントを使用して SQL Server を実行しているコンピュータには、この手順は不要です)。
    1. [Users] フォルダでユーザー アカウントを右クリックし、[プロパティ] をクリックします。
    2. ユーザー アカウント プロパティのダイアログ ボックスで、[アカウント] タブをクリックします。
    3. [アカウント オプション][アカウントは委任に対して信頼されている] チェック ボックスをオンにします。このアカウントの [アカウントは重要なので委任できない] チェック ボックスをオフにします。
  3. Kerbtray.exe ユーティリティを使用して、ドメイン コントローラとホストから Kerberos チケットを受け取ります。
    1. 通知領域の Kerbtray アイコンを右クリックし、[purge tickets] をクリックします。
    2. 緑色の Kerbtray アイコンが黄色に変わるまで待機します。黄色に変わったら、コマンド プロンプト ウィンドウを開いて次のコマンドを実行します。
      net session* /d
      このコマンドを実行すると既存のセッションが終了し、新しいセッションが確立されて Kerberos チケットが受け渡されます。

手順 2: IIS サービス サーバーの構成

  1. 既定の Web サイト Wwwroot のファイルをサンプル .asp ファイルに置き換えます。サンプル .asp ファイルを作成するには、「SQL Server のデータを取得するためのテスト用 ASP スクリプト」に記載されているコードを使用します。
  2. ファイルを Wwwroot フォルダに追加します。この操作を行うには、「SQL Server のデータを取得するためのテスト用 ASP スクリプト」のサンプル コードを使用します。Default.asp という名前を付けてファイルを保存します。
  3. 統合 Windows 認証のみを使用するように Web サーバーを再構成します。
    1. 既定の Web サーバーを右クリックし、[セキュリティ] フォルダをクリックします。
    2. [セキュリティ] フォルダで適切な変更を行い、[匿名アクセス] チェック ボックスをオフにします。
    3. コマンド プロンプトで、次のコマンドを実行します。
      cscript C:\Inetpub\Adminscripts\adsutil.vbs get w3svc/NTAuthenticationProviders
      [ネゴシエート] が有効になっている場合、次の結果が返されます。
      NTAuthenticationProviders : (STRING) Negotiate,NTLM
      Kerberos と NTLM の認証を両方ともサポートするように IIS を構成する場合の追加情報については、サポート技術情報の資料「Kerberos 認証と NTLM 認証の両方をサポートするように IIS を構成する方法」を参照してください。
    ms189585.note(ja-jp,SQL.90).gifメモ :
    IIS サービス サーバーには MDAC (Microsoft Data Access) 2.8 SP1 以降のバージョンをインストールする必要があります。この操作を行うには (テストのためにツールを使用できるようにするには)、Web サーバーに Microsoft SQL Server 2000 クライアント ツールをインストールします。クライアント ツールをインストールせずに MDAC 2.8 SP1 以降のバージョンのみをインストールするには、この Microsoft Web サイトを参照してください。
  4. レジストリに HKLM\SW\MS\MSSQLSERVER\Client\DSQUERY 値が存在していることを確認します。この値が表示されない場合、DSQUERY:Reg_SZ:DBNETLIB という値を追加します。
  5. Kerbtray.exe ユーティリティを使用して、ドメイン コントローラとホストから Kerberos チケットを受け取ります。
    1. 通知領域の Kerbtray アイコンを右クリックし、[purge tickets] をクリックします。
    2. 緑色の Kerbtray アイコンが黄色に変わるまで待機します。黄色に変わったら、コマンド プロンプト ウィンドウを開いて次のコマンドを実行します。
      net session * /d
      このコマンドを実行すると既存のセッションが終了し、新しいセッションが確立されて Kerberos チケットが受け渡されます。

手順 3: SQL Server の SPN の作成

ms189585.Caution(ja-jp,SQL.90).gif注意 :
Kerberos を使用するには、SQL Server のクライアントから TCP/IP プロトコルを使用して SQL Server に接続する必要があります。たとえば、クライアントで名前付きパイプ プロトコルを使用する場合、Kerberos は使用されません。コンピュータに複数の SQL Server インスタンスが存在する場合、それぞれのインスタンスで使用される TCP/IP ポートは一意なので、インスタンスごとに SPN (サーバー プリンシパル名) を構成する必要があります。
ms189585.note(ja-jp,SQL.90).gif重要 :
LocalSystem アカウントで SQL Server サービスを実行している場合、SQL Server の SPN を手動で構成する必要はありません。SQL Server サービスの開始時に自動的に SPN が作成されます。ドメイン ユーザー アカウントで SQL Server サービスを実行している場合、手動で SPN を構成する必要があります。この操作を行うには、次の手順を実行します。

SQL Server の SPN を構成するには、Microsoft Windows リソース キットの SETSPN ユーティリティを使用します。SETSPN ユーティリティをダウンロードするには、この Microsoft Web サイトを参照してください。

SETSPN を実行する前に、次のことを考慮してください。

  • SPN を登録するアクセス許可を持ったログオン アカウントで setspn.exe を実行する必要があります。
  • SQL Server インスタンスを実行しているドメイン ユーザー アカウントをメモします。以降の例で使用するドメイン ユーザー アカウント名は <SQL_Service_Account> とします。
    重要   SQL Server インスタンスを LocalSystem アカウントで実行している場合、SETSPN ユーティリティを実行する必要はありません。
  • SQL Server を実行しているコンピュータの FQDN (完全修飾ドメイン名) を知っておく必要があります。SQL Server を実行しているコンピュータの FQDN を調べるには、ping ユーティリティを使用します。この操作を行うには、次の手順を実行します。
  1. SQL Server を実行している IP アドレス調査対象のコンピュータに ping を実行します。
    C:\>ping MySQLServer
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time=1ms TTL=128
  2. ping -a を使用して IP アドレスの逆引き参照を実行し、DNS (ドメイン ネーム システム) プロトコルによって FQDN が正常に返されることを確認します。
    C:\>ping -a 10.10.10.10
    Pinging MySQLServer.MyDomain.com [10.10.10.10] with 32 bytes of data:
    Reply from 10.10.10.10: bytes=32 time<1ms TTL=128
  3. フェールオーバー クラスタ インスタンス名に対して ping を実行し、IP アドレスを取得します。次に、ping -a を実行して、DNS によって FQDN が正常に返されることを確認します。
ms189585.note(ja-jp,SQL.90).gifメモ :
SQL Server フェールオーバー クラスタリングを使用している場合、フェールオーバー クラスタ インスタンス名の FQDN を使用します。SQL Server インスタンスで使用している正確な TCP/IP ポートをメモします。この情報を確認するには、SQL Server を実行しているコンピュータで SQL Server 構成マネージャを開き、SQL Server インスタンスをクリックして TCP/IP プロトコルのプロパティ (既定のポート) を表示します。

SQL Server サービスを実行しているドメイン ユーザー アカウント、SQL Server を実行しているコンピュータの FQDN、および SQL Server インスタンスで使用している TCP/IP ポートを特定した後、次の手順を実行して SQL Server の SPN を作成します。

ms189585.note(ja-jp,SQL.90).gifメモ :
SETSPN コマンドを実行するには、Domain Administrators グループのメンバである必要があります。
  1. SQL Server フェールオーバー クラスタリングを使用している場合、次の SETSPN コマンドを実行します。
    setspn -A MSSQLSvc/<FQDN> <SQL_Service_Account>
    たとえば、ドメイン ユーザー アカウント SQLSVC で MySQLServer.MyDomain.com (クラスタ化されている SQL Server 2005 インスタンスの名前) を実行している場合、次のコマンドを実行します。
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com SQLSVC
  2. クラスタ化されているかどうかにかかわらず SQL Server を実行しているコンピュータに対し、次の SETSPN コマンドを実行して、SQL Server を実行しているコンピュータで使用しているポートの SPN を登録します。
    setspn -A MSSQLSvc/<FQDN>:<Port> <SQL_Service_Account>
    たとえば、ドメイン ユーザー アカウント SQLSVC で MySQLServer.MyDomain.com をポート 1433 を使用して実行している場合、次の SETSPN コマンドを実行します。
    setspn -A MSSQLSvc/MySQLServer.MyDomain.com:1433 SQLSVC
  3. SPN を登録した後、登録が正しく行われたことを SETSPN ユーティリティの LIST 機能 (-L スイッチ) を使用して確認します。SETSPN -L <SQL_Service_Account> を実行して、SQL Server インスタンスを実行しているドメイン ユーザー アカウントに登録されているすべての SPN を一覧表示します。
    setspn -L <SQL_Service_Account>
    たとえば、ドメイン ユーザー アカウント SQLSVC で MySQLServer.MyDomain.com をポート 1433 を使用して実行している場合、次のコマンドを実行します。
    setspn -A SQLSVC
    手順 1. (SQL Server がクラスタ化されている場合) および手順 2. (SQL Server がクラスタ化されていない場合) で作成した SPN が、次のように出力に表示されます。
    C:\>setspn -l SQLSVC
    Registered ServicePrincipalNames for CN=SQLSVC,CN=Users,DC=MyDomain,DC=com:
        MSSQLSvc/MySQLServer.MyDomain.com
        MSSQLSvc/MySQLServer.MyDomain.com:1433
ms189585.note(ja-jp,SQL.90).gifメモ :
SQL Server フェールオーバー クラスタリングを使用している場合、ポート番号を指定しない SPN と、ポート番号を指定した別の SPN を登録する必要があります。SQL Server を実行している通常の非クラスタ化コンピュータについては、ポート番号を指定した SPN を登録するだけで十分です。ただし、ポート番号を指定しない SPN が他にあっても、非クラスタ化コンピュータで問題が発生することはありません。
ms189585.note(ja-jp,SQL.90).gifメモ :
2 種類の SPN が登録されていることを確認するために、ドメイン コントローラで Ldifde.exe ユーティリティを使用することもできます。これについては、このトピックの「Active Directory サーバー プリンシパル名情報のリストを取得する方法」で説明します。

手順 4: クライアント コンピュータの構成

  1. 接続元の各クライアントで、Windows 認証を使用するように Microsoft Internet Explorer を構成します。
  2. Internet Explorer で、[ツール] メニューの [インターネット オプション] をクリックします。
  3. [詳細設定] タブをクリックします。
    [セキュリティ][統合 Windows 認証を使用する (再起動が必要)] チェック ボックスをオンにし、[OK] をクリックします。

手順 5: 構成のテスト

関連のある各コンピュータで、次の手順を実行します。

  1. コンピュータにログオンし、Kerbtray.exe を使用して、ドメイン コントローラから有効な Kerberos チケットを取得できることを確認します。
  2. Kerbtray.exe を使用して、コンピュータにあるすべてのチケットを削除します。
  3. SQL Server のデータを返す Web ページを作成し、接続します。
ms189585.note(ja-jp,SQL.90).gifメモ :
SQLSERVERNAME を SQL Server を実行しているコンピュータの名前に置き換えます。
  • データが返されると、このページには、Negotiate という認証の種類と、sp_helpdb ストアド プロシージャの結果を示す SQL Server のデータが表示されます。このストアド プロシージャは、.ASP ページ経由で接続しているサーバー上のデータベースのリストを返します。
  • SQL Server で監査を有効にした場合は、アプリケーション ログで、接続が "信頼関係接続" であることを確認します。

SQL Server のデータを取得するためのテスト用 ASP スクリプト

SQL Server のデータのテスト用 ASP スクリプトを次に示します。このコード サンプルを使用する場合、SQLSERVERNAME を SQL Server を実行しているコンピュータの名前に置き換えます。

<%@ Language=VBScript %>

<HTML>

<HEAD>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

</HEAD>

<BODY>

<%="'auth_user' is" & request.servervariables("auth_user")%>

<P>

<%="'auth_type' is" & request.servervariables("auth_type")%>

<P>

Connections string is <B>" Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME </B>

<P>

<%

set rs = Server.CreateObject("ADODB.Recordset")

set cn = Server.CreateObject("ADODB.Connection")

cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=SQLSERVERNAME"

rs.open "MASTER..sp_helpdb",cn

Response.Write cstr(rs.Fields.Count) +"<BR>"

while not rs.EOF

Response.Write cstr(rs(0))+"<BR>"

rs.MoveNext

wend

rs.Close

cn.Close

set rs = nothing ' Frees memory reserved by the recordset.

set cn = nothing ' Frees memory reserved by the connection.

%>

</BODY>

</HTML>

Active Directory サーバー プリンシパル名情報のリストを取得する方法

Active Directory SPN (サーバー プリンシパル名) 情報のリストを取得するには、使用しているドメイン コントローラのいずれかで次のコマンドを入力します (betaland は NetBIOS ドメイン名、NewoutputUsers.txt は結果を取り込む出力ファイルの名前です)。完全パスを指定しなかった場合は、コマンド ラインを実行している現在のフォルダにファイルが保存されます。このサンプル コマンドは、ドメイン全体を対象にしたクエリを実行します。

ldifde -d "CN=Users,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

この構文から生成されるファイル NewoutputUsers.txt には、このトピックの「NewouputUsers.txt のドメインレベルの出力」にある出力と同様の情報が含まれます。

ドメイン全体から出力を収集すると、サイズが大きくなることがあります。収集する情報を特定のユーザー名の情報に限定するには、次の構文を使用します (User Name はユーザー名、betaland はクエリを実行するドメインです)。

ldifde -d "CN=User Name,DC=betaland" -l servicePrincipalName -F NewoutputUsers.txt

特定のユーザーの情報を収集することで、検索しなければならないデータが大幅に減少します。ドメイン全体の情報を収集する場合、該当するサーバーの特定のユーザー名を検索してください。出力サンプルから、次のことがわかります。

  • 既に存在しないが、Active Directory から完全に削除されたわけではないサーバーのエントリ。
  • ユーザー "User Name" が約 10 台の異なるサーバーの有効な SPN 情報を所持していること。

また、ADSI (Active Directory サービス インターフェイス) ツールを使用して、有効でない Active Directory エントリを修正できます。

注意   ADSI Edit スナップイン、LDP ユーティリティ、またはそれ以外の LDAP Version 3 クライアントを使用する場合、Active Directory オブジェクトの属性を誤って変更すると、深刻な問題が発生することがあります。そのような問題が発生した場合、Microsoft Windows 2000 Server および Microsoft Exchange 2000 Server の両方を再インストールする必要があります。Active Directory オブジェクトの属性を誤って変更した場合に発生する問題について、解決できる保証はありません。このような属性は、ユーザーの責任で変更してください。

NewouputUsers.txt のドメインレベルの出力

dn: CN=User Name,CN=Users,DC=betaland

changetype: add

servicePrincipalName: MSSQLSvc/CLUSTERDEFAULT.betaland:1257

servicePrincipalName: MSSQLSvc/INST3.betaland:3616

servicePrincipalName: MSSQLSvc/INST2.betaland:3490

servicePrincipalName: MSSQLSvc/SQLMAN.betaland:1433

servicePrincipalName: MSSQLSvc/VSS1.betaland:1433

servicePrincipalName: MSSQLSvc/INST1.betaland:2536

servicePrincipalName: MSSQLSvc/INST4.betaland:3967

servicePrincipalName: MSSQLSvc/SQLVIRTUAL1.betaland:1434

servicePrincipalName: MSSQLSvc/SQLVIRTUAL.betaland:1433

servicePrincipalName: MSSQLSvc/SQLBUSTER.betaland:1315

参照

その他の技術情報

高可用性の構成方法について
SQL Server 2005 のインストール
SQL Server 2005 へのアップグレード

ヘルプおよび情報

SQL Server 2005 の参考資料の入手