質問

私たちは、SQL 2005を使用して、個々のユーザを識別したいので、我々はパフォーマンスの目的のためにそのSQLをトレースすることができますが、我々はそれが難しい誰が誰であるかを識別するユニークに発見していています。

私たちは、すべてのユーザーがアクティビティモニタで同じユーザーを持っているので、接続プールとSQL 2005を使用しています。彼らのNTのユーザー名を設定していないと思われる - 多分私達は、SQL Serverのユーザーではないドメインユーザーを使用しているので、何も個々のIPアドレスが設定されていないので、我々はまた、Citrix社を使用しています。この(非常に一般的な)environementでは、個々のユーザーを識別する方法を教えてください。

役に立ちましたか?

解決 3

SQLプロファイラでクライアントプロセスIDがを追跡することによって、問題を解決しました。私たちは、通常のセットアップではCitrix社、またはタスクマネージャの中から、特定のユーザーと自分のPIDを識別することができます。そして、そのPIDによってSQLプロファイルで出力をフィルタリングします。

あなたがDB上で作業しているが、アプリケーションのソースへのアクセスを持っていないとき、

これは素晴らしいです。多くの場合、標準レポートは、SPのは、などの固定変更する必要がありますが実行されていますかわからない場合、それは干し草の山で針だ - /デバッグを分析し、SQLをキャプチャし、ユーザーを追跡するために、SQLプロファイルを使用する - の移動修正<。 / P>

他のヒント

全員が同じユーザー名を使用して、同じIPから来ている場合は、それらを区別することはできません。 Windows認証を使用している場合を除きMSSQLでも、ユーザーの接続が持っているWindows上でどのようなユーザー名語られることはありません。

あなたはそれがWindows認証を使用するようにセットアップを変更して考えがありますか?これは、問題の論理的な解決策のように思えます。こと、またはSQLの全員に個別のログインを設定するが、それはあなたのActive Directoryユーザーの一覧を複製することだろう...

SQLプロファイラでユーザーを識別するためには、各要求または接続コンテキストの一部として何らかの方法でSQL Serverにその情報を提供する必要があります。一つの方法は、など、さまざまなユーザーを接続することですが、あなたは何千人ものユーザーを持っている場合は、アカウントの数千人(SQL認証またはWindows認証)が必要でしょうし、それはすぐに管理不能になります。

もっと良い方法は、ユーザーの名前であることを、接続文字列でApplication Nameパラメータを設定することです。一度設定すると、あなたは、SQLプロファイラでそのフィールドにフィルタリングすることができます:Data Source=.;Initial Catalog=Northwind;Integrated Security=SSPI;Application Name=RickNZ

このアプローチの欠点は、接続文字列はバイトごとに同一である場合、接続が(デフォルトで有効になっている)のみ共有接続をプールすることです。あなたは、ユーザーごとにそれらが異なる作るのであれば、あなたは、パフォーマンス上の結果の影響で、多くのより多くの接続を持つことになります。重く、マルチスレッド環境では、あなたが利用できるプールされた接続が不足する可能性が可能性もあります。たとえそうだとしても、それは短期的なデバッグに便利かもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top