1

Web アプリをインストールする Web セットアップ プロジェクトがあります。カスタム アクションで、SQL スクリプトを実行してデータベースを構築しています。

シンプルで、ほとんどが MS のサンプル コードです。正常に動作します。

private void ExecuteSql(string serverName, string dbName, string Sql)
{
    System.Data.SqlClient.SqlConnection masterConnection = new System.Data.SqlClient.SqlConnection();
    masterConnection.ConnectionString = "Server=" + serverName + "; Database=" + dbName + ";Integrated Security=SSPI";

    System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql, masterConnection);
    Command.Connection.Open();
    Command.Connection.ChangeDatabase(dbName);
    try
    {
        Command.ExecuteNonQuery();
    }
    finally
    {
        Command.Connection.Close();
    }
}

問題は、SQL Server に送信されるユーザーが「AMBER\corwin」ではなく「AMBER\CHAOS$」のように「DOMAIN\MACHINENAME$」であることです。

SQL Server のログインとして "AMBER\CHAOS$" を追加し、ユーザーに十分な権限を与えると、すべて正常に動作します。それは最終環境では不可能です。

では、Web セットアップを "AMBER\CHAOS$" ではなく "AMBER\corwin" として SQL サーバーに接続するには、どうすればよいでしょうか?

4

5 に答える 5

0

ユーザーを偽装するようにカスタム アクションに指示する必要があります。MSI はどのように作成していますか? WiX では、要素に Impersonate="yes" を追加します。

于 2009-12-18T22:39:03.913 に答える
0

*.config ファイルをいじろうとするかもしれません。これらの要素を使用してみることができます:

<system.web>   
  <authentication mode="Windows" />   
  <identity impersonate="true" /> 
</system.web>
于 2009-10-06T18:41:35.993 に答える
0

おそらく、これは Web サイト アプリケーション プールのユーザー名です。/configuration/system.web 内の web.config ファイルに追加してみてください。

<identity impersonate="true"/>

于 2009-10-06T18:42:35.320 に答える
0

これはおそらく、Web サイトのアプリケーション プールが Windows ユーザーではなく Network Service として実行されているためです。この値をデータベースに接続するアカウントに変更し (アプリケーションに注意してください。アーキテクチャによってはアプリが変わる可能性があります)、SQL で権限を追加します。

于 2009-12-20T05:22:19.923 に答える
0

接続文字列を取得して、次のようにします。

masterConnection.ConnectionString = "Server=" + serverName + "; Database=" + dbName + ";統合セキュリティ=SSPI;UserId=" + userId + ";Password=" + パスワード + ";";

于 2009-10-06T18:36:25.180 に答える