現在のユーザーを定義することは可能ですか?
ストアド プロシージャ 'sp_mgGetConnectedUsers' が見つかりました。一意のフィールド「住所」のみを含む結果セットを返します。実行中のクエリをそのような「アドレス」に関連付けるにはどうすればよいですか。
ご意見をお聞かせください。
注: 私の知る限り、現在のユーザーを取得する別の方法は、接続ごとに一意のアプリケーション ID を設定することですが、この方法はあまり好きではありません。
現在のユーザーを定義することは可能ですか?
ストアド プロシージャ 'sp_mgGetConnectedUsers' が見つかりました。一意のフィールド「住所」のみを含む結果セットを返します。実行中のクエリをそのような「アドレス」に関連付けるにはどうすればよいですか。
ご意見をお聞かせください。
注: 私の知る限り、現在のユーザーを取得する別の方法は、接続ごとに一意のアプリケーション ID を設定することですが、この方法はあまり好きではありません。
データ ディクショナリを使用している場合は、ユーザー スカラー関数を使用できます。
select user() from system.iota;
sp_mgGetConnectedUsers から返された DictionaryUser フィールドと関連付けます。
ディクショナリを使用しない場合、最も簡単な方法は、sp_SetApplicationID と sp_GetApplicationID を使用することです。なんでそんなの好きじゃないの?あなたの最終的な目標が何であるかを知っていれば、あなたを助けるのがより簡単になるかもしれません. クエリに関連付けられたユーザーを表示するだけの場合は、sp_GetSQLStatements プロシージャを実行します。
現在のユーザーについて考える方法は複数あります。アドバンテージの使い方次第です。
sp_mgGetConnectedUsers の出力は次のようになります。
UserName - コンピュータ名
辞書 User - ADS 辞書へのログインに使用されるユーザー
Address - IP、IPX、または IPC アドレス
OSUserLoginName - クライアント OS ログイン名
TS Address - クライアント アドレスのエンド ユーザーの IP アドレス
ApplicationID - 一意に設定可能な ID default=exe 名
ディクショナリを使用し、各人がディクショナリを一意の名前で接続する場合は、ディクショナリ ユーザーが適しています (SQL スクリプトなどの場合は、「system.iota から user() を選択する」(または ) によってこれを取得することもできます)。Address と UserName は、ユーザーの IP アドレスとユーザーのコンピュータ名になります。これは、ユーザーを一意に識別するのにも役立ちます。ユーザーがターミナル サーバー経由でアクセスしている場合は、TS アドレスを使用して、OSUserLoginName と組み合わせてユーザーを識別できます。ApplicationID については詳しく説明しません。このソリューションは気にしないと具体的に述べたからです。しかし...これは好きなように設定できますが、デフォルトはアプリケーションの名前です(つまり、ARC.exe)
質問のパート B は、クエリを関連付ける方法です。sp_getsqlstatements プロシージャは、現在アクティブなクエリを返します (または、ARC でリモート サーバー情報を使用できます)。これは、sp_mgGetConnectedUsers からの UserName と同じ接続名を返します。この組み合わせを使用して、コンピューター名、IP アドレス (または端末アドレス)、辞書のユーザー名、クライアント OS のログイン名、およびアプリケーション名を知ることができます。