2

私の (.NET) アプリでは、ユーザーはデータベースの値を微調整できます。次に、Crystal または Reporting Services の編集に基づいてレポートを生成する必要がありますが、それは重要ではありません。重要なのは、生成がローカル ボックスで確実に行われるわけではないということです。たとえば、Crystal Reports がない可能性があります (または何でも)マシンにインストールされています。

そのため、ネットワーク マシン (レポートを生成できる) にメッセージ キューを設定すると、アプリはそのキューにメッセージを投稿し、必要なすべての情報を含むオブジェクトを送信します。ここまでは順調ですね。

ルールとトリガーを使用してターゲット キューを構成したので、新しいメッセージが送信されると、そのリモート マシン上のコンソール アプリが自動的にメッセージの処理を試みます。

問題は、すべて正常に動作するにもかかわらず、トリガーされたコンソール アプリがローカル コンピューター アカウントとして実行されることです。アプリは、統合認証を使用するデータベースと対話する必要があります。

コンソール アプリは、実際のユーザーとして実行すると完全に機能しますが、メッセージ キューによってトリガーされた場合は機能しません。

問題は、ルール、トリガー、またはコンソール アプリを特定のユーザーとして実行するように構成できますか? 見えると思われるすべての設定オプションを試しましたが、役に立ちませんでした。

おそらく、アプリのコード自体 (app.config) 内でユーザーになりすますことができますか? ASP.NETコードでは実行可能ですが、WinForms コードでは実行できません。

編集:なりすましの提案はうまく機能します... Process.Start()関数から「アクセスが拒否されました」というエラーが発生するまで、startwithcreateprocess()を呼び出します。

私が偽装しているユーザーには、ローカルボックスでプロセスを実行する権限があります(したがって、問題なくネイティブに実行できます)。

4

2 に答える 2

2
    Process p = new Process();

    p.StartInfo.UseShellExecute = false;

    SecureString password = new SecureString();
    string pwd = "mysecret123";
    foreach (char c in pwd)
    {
        password.AppendChar(c);
    }

    p.StartInfo.Domain = "DomainHere";
    p.StartInfo.UserName = "Natthawut";
    p.StartInfo.Password = password;

    p.StartInfo.FileName = "cmd";
    p.StartInfo.Arguments = "/c dir";
    p.Start();

.NET セキュリティ ブログを参照してください - http://blogs.msdn.com/shawnfa/archive/2004/06/02/146915.aspx

ところで、これはMSMQとは関係ないと思います:)

編集:何かが足りないのかもしれません。MSMQ が新しいプロセスをどのように起動するかについては不明です。または、コンソール アプリを起動するために使用されているのはアプリケーションだけです。

于 2008-12-23T17:15:17.187 に答える
0

アプリケーション内で偽装を使用してみましたか?

もっと大まかに言えば、アプリケーションとして実行できます。

于 2008-12-23T17:04:01.237 に答える