2

私の問題の説明はやや複雑に聞こえますが、私のアプローチには欠陥があると思われるので、もっと良いアイデアもありがたいです。

簡単な説明:

MSSQL 2008 DBへの接続文字列とIIS6に展開されているWebサイト名を前提として、Webサイトがデータベースに接続できるかどうかをプログラムで確認したいと思います。

長い説明:

  1. 私はMSSQLServerデータベースを持っています、それを呼びましょうportal_db
  2. IIS6にデプロイされた。というアプリケーションがありますportal。URLでアクセスできますhttp://localhost/portal。Web.configファイルで、データベースへの接続文字列を指定しました。これは次のようになります。"server=(local)\SQLEXPRESS;trusted_connection=yes;database=portal_db"
  3. WebアプリケーションはSystem.Data.SqlClient.SqlConnection、ラッパー、ORM、マッピングなどを使用せずに、を使用してデータベースにアクセスしています。
  4. ウェブサイトはappoolで実行するように構成されていますPortalAppPoolApplicationPoolIdentityセキュリティコンテキストとして使用しています。
  5. Webアプリケーションコード(特にデータベースへのアクセス方法)を簡単に変更することはできません。

Webアプリケーションがデータベースに接続しようとすると、ユーザーIIS APPPOOL\PortalAppPoolがMSSQLデータベースで構成されているかどうかに応じて、成功または失敗します。これは私が理解している部分ですが、アプリをデプロイするときに、apppool仮想アカウントのdbに新しいユーザー/ログインを作成するのを忘れることがよくあります。したがって、私がやりたいのは、別のスタンドアロンのコンソールアプリ(できればC#で記述されているが、必ずしもそうとは限らない)から、次の方法でWebアプリケーションがデータベースにアクセスできるかどうかを確認することです。

  1. から接続文字列を読み取りますWeb.config
  2. アプリプールID設定の読み取り(Directory Services APIによってこれを行うために管理されています)
  3. アプリプールで定義された資格情報を使用してIDを偽装します(ここで見つけた偽装クラスを使用:http://platinumdogs.me/2008/10/30/net-c-impersonation-with-network-credentials/これは他の多くの場所で見つかったアイデアを使用します、MSDNを含む)
  4. SqlConnectionから読み取った接続文字列で開きますWeb.config

要約すると、次のスニペットになります。

using (new Impersonator("IIS APPPOOL\\PortalAppPool", "", ""))
{
    SqlConnection conn = new SqlConnection(databaseConnectString);
    conn.Open();
}

アプリプールのセキュリティコンテキストが特定のユーザー、ローカルシステムなど以外の値に設定されている場合、すべてが非常にうまく機能します。ユーザーの名前とパスワードにAppPoolIdentity渡される資格情報を変更すると、目的の結果が得られます(Impersonatorデータベースにログインマッピングします。追加するとすべて問題ありません)。しかし、仮想アカウントを偽装することはできないようです。IIS APPPOOLS\PortalAppPoolどのパラメーターを渡す必要があるのか​​わかりLogonUserません。それが不可能な場合でも、驚くことはありません。なりすましのアプローチに集中しすぎている可能性があり(他のユーザーのレジストリキーやサービスにアクセスするために使用していますが、うまく機能します)、もっと良い方法があるかもしれません。

他にもっと良いアイデアがある場合、またはこの問題についてさらに説明が必要な場合は、私に知らせてください。

4

1 に答える 1

0

仮想アカウント(IISサービスアカウント)になりすますことはできないと思います。これらは、主にIISセキュリティ用に設定された特別なサービスアカウントです。これらはローカルサービス専用であり、どのドメインにも接続できません。Windows Server 2008R2およびWindows7の仮想アカウントは、サービス管理を簡素化するために次の機能を提供する「管理対象ローカルアカウント」です。

  • パスワード管理は必要ありません。
  • ドメイン環境でコンピューターIDを使用してネットワークにアクセスする機能。

仮想アカウントに「ログイン」することはできません。仮想アカウントはセキュリティ目的でWindowsによって使用されます。

時間がある場合は、少し読んでください。

元の問題を解決するには、同じロジックを実行できるアプリを作成しますが、アカウントでログインしようとするのではなく、SQLサーバーに正しいユーザーが設定されているかどうかを確認します。

于 2012-10-18T15:08:06.533 に答える