1

Windows イントラネット環境で ASP.net アプリケーションを実行しています。現在ログインしているユーザーとして特定のデータベース更新を実行する必要があります。

IIS/サーバー情報:

  • IIS バージョン 10
  • Windows サーバー 2019
  • ASP.net Web フォーム アプリケーション
  • .NET 4.7
  • Windows 認証が有効
  • 偽装匿名認証が無効になっています
  • アプリ プールは統合されたパイプラインを使用します
  • アプリ プールは、必要に応じて他のリソースにアクセスする権利を持つ、その ID の ドメイン サービス アカウントで実行されます。

その他の詳細:

  • すべてのデータベース接続文字列は、統合セキュリティ = true のように設定されています
  • Active Directory で、Web サーバーと SQL サーバー間の制約付き委任を構成し、MSSQLSvc : 1433およびMSSQLSvc (ポートなし)を許可する
  • ドメイン サービス アカウントは、Web サーバーのローカル管理者グループのメンバーです (テスト目的のみ)。

現在ログインしているユーザーとして実行する必要があるデータベースの更新を実行すると、次のように偽装します。

 var windowsIdentity = User.Identity as WindowsIdentity;
 WindowsIdentity.RunImpersonated(windowsIdentity.AccessToken, () =>
 {
     // perform database update
 });

これは例外をスローします - System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

AppPoolIdentity (デフォルトのアプリ プール ID)を使用するようにアプリ プール ID を変更すると 、偽装は正しく機能します。

この偽装がAppPoolIdentityでは機能するのに、ドメイン サービス アカウントでは機能しないのはなぜですか?

4

1 に答える 1