ユーザーからIIS、次にIISからSQL)に資格情報を渡すときに、Windows認証(Kerberos)を機能させるのに問題があります。セットアップが完了しました。 SQL用のSPNであり、委任を許可するようにIISサーバーアカウントを設定します。
IISコンピューターアカウントを設定して、任意のサービスの委任を許可すると、次のように機能します。
ただし、特定のサービス用に設定すると、資格情報が渡されず、匿名ユーザーとの接続に関してエラーが発生します。
ご覧のとおり、私はSQL Expressインスタンスに接続しており、これを解決するためにいくつかのSPNを設定しましたが、いずれもうまくいきません。明らかに、任意のサービスを許可するときに機能するという事実は、このサービスのリストから何か他のものが欠落していることを私に言いますが、私は何を知りません!
この問題に遭遇する可能性のある他の人にとって、問題は、アプリプールアカウントのドメインユーザーアカウントでカーネルモード認証を使用することにありました。
カーネルモード認証は、IIS SPNに関するほとんどの作業を行いますが、アプリプールIDにシステムアカウントを使用していることを前提としています。ドメインアカウントを使用している場合は、次のことを行う必要があります。このユーザーのHTTPSPNを設定します。次に、カーネルモード認証で通常行うように、IISマシンアカウントではなく、このユーザーアカウントでSQLへのアクセスを委任する必要があります。
私は過去にIIS6、Windows 2003、SQL 2005でこれを機能させてきましたが、それを見てから長い時間がかかりますが、それが役立つ場合は、次のことを確認できます。
ADでは、Webサーバーには「指定されたサービスのみを信頼する」、「任意の認証プロトコルを使用する」に設定されたSQLサーバーのエントリが1つあり、エントリにはFQDNではなくSQLホスト名があります。サービスタイプはMSSQLSvcで、ポートは1433です。
SQL Serverコンピューターアカウントは、委任に対して信頼されていません。
また、コマンドラインで「setspn」を使用して構成する必要があることも覚えています。「setspn-Lwebserver」からの設定は次のとおりです。
HTTP/intranet.domain.example.org:80
HTTP/intranet:80
Host/webserverhostname
Host/webserverhostname.domain.example.org
'intranet'は、ウェブサイトに使用するエイリアスであり、example.orgではなく実際のFQDNを入力します。
setspn -A HTTP/intranet:80 webserver
等々。
また、これはかなり徹底的なチェックリストのように見えます: http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and- sql-server.aspx
WebサーバーのSPN構成に関係なく、CNAMEエイリアスではなく、SQLServer名のホストレコードを使用してSQLServerのSPNを作成する必要があることがわかりました。
つまり、すべての拠点をカバーするために、次のようにSPNを追加しました。
setspn -A MSSQLSvc/sqlserverhostname.example.org SQLServerServiceAccountName
setspn -A MSSQLSvc/sqlserverhostname:1433 SQLServerServiceAccountName
setspn -A MSSQLSvc/sqlserverhostname.example.org:1433 SQLServerServiceAccountName
setspn -A MSSQLSvc/sqlserverhostname SQLServerServiceAccountName
..「sqlserverhostname」がホストレコードとしてDNSに登録されていることを確認します。