web-dev-qa-db-ja.com

SQL Server2008のダブルホップの問題

次のシナリオを設定しようとしています。私は3台のサーバーを持っています、それらはすべて同じドメインにあります。

  • サーバーAには、(ドメイン)サービスアカウントdom\webで実行されるWebアプリケーションがあります。
  • サーバーBには、(ドメイン)サービスアカウントdom\sqlで実行されるSQLServer 2008R2のインスタンスがあります。
  • サーバーCには、(ドメイン)サービスアカウントdom\sqlで実行されるSQL Server 2008 R2のインスタンスがあります。

サーバーBおよびCはSQLクラスターにあります。 BとCのインスタンスはリンクサーバーです。

AからSQLServer Management Studioを実行し、ドメインアカウント(dom\usr)を使用してBに接続すると、BとCからデータを選択するクエリを実行しようとしますが、機能します。

同じことを試みるWebアプリケーションを試すと、エラーが発生します。

ユーザー「NT AUTHORITY\ANONYMOUS LOGON」のログインに失敗しました。

SQLの接続には、ユーザーdom\webのauth_scheme KERBEROSがあるため、NTLMではないことがわかります。

また、dom\webドメインアカウントでは、ADで「アカウントは機密で委任できない」オプションが選択されていません。

また、最初のケースではダブルホップが機能しないため、SPNは正しく設定されていると思います。

これはサーバーCのエラーです。

ソースログオン

ユーザー「NTAUTHORITY\ANONYMOUSLOGON」のメッセージログインに失敗しました。理由:トークンベースのサーバーアクセス検証がインフラストラクチャエラーで失敗しました。以前のエラーを確認します。 [クライアント:10.65.10.53]

ソースログオン

メッセージエラー:18456、重大度:14、状態:11。

6
dunno

IISは、IUSRアカウントで「匿名」に設定されたWebサイトを持っていると思います。これは、ANONYMOUSLOGONとしてドメイン全体に適用されます。

IISマネージャを開くと、左側にツリーがあります。このツリーでサーバーを展開し、[サイト]を展開して、このプロジェクトで使用しているWebサイトをクリックします(つまり、デフォルトのWebサイト)IIS managerの右側で、[認証]アイコンをダブルクリックします。次の画面で、[匿名認証]を右クリックし、[編集]を選択します。コンテキストメニューから[特定のユーザー]が選択されていることを確認し、[設定]ボタンをクリックします。ユーザーをdom\webに変更し、正しいパスワードを入力して、[OK]をクリックします。

この時点で、dom\webがSQLサーバーにアクセスできないという問題が発生している可能性があります。 dom\webのSQLログインを作成してから、dom\webにアクセスを許可するユーザーをデータベースに作成する必要があります。

2
Brain2000

他に追加する-私は、クエリの実行がSSMSからは機能するが、アプリケーションのフロントエンドを介してIISから)機能しない状況にあります。

私は主にこれらの2つのリンクを問題の解決にのみ使用します。 Active Directory、構成ファイル、IIS、および考慮すべきO/Sには非常に多くの異なる設定があり、それはまったく予期しないものになる可能性があります。重要なのは、何が動作しているかを知ることです。 system/IIS/SQL Serverが起こっていると考えています。以下のDELEGCONFIGリンクを参照してください。

したがって、SQL Serverを正しく設定するためのKerberos聖書とは何かへのリンク– http://msdn.Microsoft.com/en-us/library/ff679930(v = SQL.100).aspx 。これはReporting Servicesに固有のものですが、Reporting Servicesを別のアプリケーションと見なすことができるため、アプリケーションサーバーにも適用されます。

認証の問題をトラブルシューティングする最良の方法は、DELEGCONFIGというツールを使用することです。 Kerberosが機能するように正しいSPNを設定するのに役立ちます。そのツールはここにあります: http://www.iis.net/community/default.aspx?tabid=34&g=6&i=1434 。これは、サーバーにインストールするIIS Webサイトであり、SPNと委任が正しく設定されているかどうかを示します。変更を加えることもできます。すべてのチェックは緑色です-ツールを実行すると理解できます。

DELEGCONFIG Webサイトを本番環境に残しませんが、本番環境の管理者がdb/appサーバーをセットアップまたはセットアップするときに、それを使用して状況を把握できます。正しく設定したら、サイトを削除するか、非表示にしてセキュリティで保護します。

HTH

1
marvinb

過去に同様の問題が発生したことを覚えています。ダブルホップでは、サービスの開始時にSQLサービスアカウントをドメイン管理者グループのメンバーとして使用し、後で削除することで解決しました。これはSPNの問題でした。

これはおそらく問題を解決する正しい方法ではありませんでしたが、計画外のダウンタイムという重大な時期にすべてが稼働しました。

0
stumct

私の仮定を置くためだけに:

  • WebアプリのユーザーのIDをSQLで使用する必要があります
    • これにより、Kerberosを使用する必要があります(ダブルホップ認証の場合)
    • Kerberosをサポートするブラウザーに制限する(IE、Chrome、Firefox(設定変更あり))
    • Dom\webに対してWebアプリのサービスプリンシパル名を構成する必要があることを意味します
  • WebサーバーとしてIIS 6または7を使用しています
  • WebアプリのID管理は、Windows Authを中心に構築されたASP .Netメンバーシッププロバイダーとして、Kerberosをサポートするように構築されています。

したがって、SPNについて言及したので、次のようなものを使用してSPNを登録したと思います。

setspn -S http/webapp.fqdn.tld dom\web

次に、ユーザーアカウントdom\webで委任を有効にしましたか?ダブルホップが機能するためには、Webアプリを実行しているユーザーアカウントがそれらの資格情報を再度渡すことを許可される必要があります。ドメイン内のユーザーアカウントのプロパティで、[委任]タブを見つけ、[任意のサービス(Kerberos)の委任を信頼する]を有効にします。

それで問題がない場合は、IIS WebサイトがパススルーWindowsAuthに設定されていることを確認し、代わりにNT USER\Anonymousアカウントを使用しないでください。

この時点で、コマンドラインからklistを実行すると、KerberosとIISがすべて正しく構成されているかどうかを確認できます。これにより、現在ログオンしているユーザーのKerberosチケットの問題がすべて出力されます。 Server: http/webapp.fqdn.tldがあるものを探し、forwardableok_as_delegateが設定されていることを確認します。

次に(上記で提案したとおり)、アプリをSQLに使用する可能性が高いユーザーのグループを追加し、必要に応じてデータベースへのアクセス許可を付与します。

...午前1時近くです。今のところ、提案をもう少しお伝えしたいと思います。うまくいけば、そこに何かが入っているので、明日仕事に追加してみます(私はニュージーランドにいるので、奇妙なサウンドのタイムゾーン)

0
Ashley

サーバーBとCにdom\webのログインを作成し、新しく作成したログインにデータベースへのアクセスを許可します。

0
Stan the DBA