SQL Serverのストアドプロシージャから、接続を所有する実行可能ファイル(MyApp.exe)の名前を取得できますか?私はAPP_NAME()があることを知っていますが、接続文字列の 'Application Name'パラメータに渡された文字列を返すだけです。T-SQLストアドプロシージャからアプリケーションの実行可能ファイル名を取得する
これが可能な場合はどうすればできますか?ありがとう。
SQL Serverのストアドプロシージャから、接続を所有する実行可能ファイル(MyApp.exe)の名前を取得できますか?私はAPP_NAME()があることを知っていますが、接続文字列の 'Application Name'パラメータに渡された文字列を返すだけです。T-SQLストアドプロシージャからアプリケーションの実行可能ファイル名を取得する
これが可能な場合はどうすればできますか?ありがとう。
残念ながら、私はこのようなことは認識していません。接続がまったく異なるマシンからのものであることを忘れないでください。
セキュリティを設計して、さまざまなアプリが異なるユーザー名を使用してデータベースにアクセスするようにすることもできます。現在のユーザーを見つけることは簡単です。
ありがとう、それは私たちがしなければならないことです。 – joelsand
ストアドプロシージャを変更してアプリ名を渡さない限り、APP_NAME()の結果が残っています。うまくいけば、開発者は単に一般的にアプリケーションを構築するために使用される開発ツールの表示であるデフォルト値を受け入れることよりも意味のある価値を置いています。このことができます
希望、
ビル
あなたがコンピュータと接続文字列から情報を得ることができますが、それは基本的にはこれだけです。
モニタリングなどの手段を使用することで、開発者が接続文字列で常にアプリケーション名を使用できるようにすることができます。たとえば、承認されたアプリケーション名ではないケースを記録したり、プロファイラを使用して物事を監視したりすることができます。
Oracleはあなたにexeの名前を与えることができますが、SQL Serverは別のアーキテクチャではありません。
私はこれがあなたが探しているものではないことを認識しています。しかし、DBCC INPUTBUFFERを使用して、コールスタックのビットを判断することができます。このようなロジックをstoreprodedureの中に入れてどこかにログすると、呼び出し元に関する情報が得られるかもしれません。
CREATE TABLE #dbc
(
EventType VARCHAR(15),
Parameters INT,
EventInfo VARCHAR(255)
)
DECLARE @execStr VARCHAR(500)
SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')'
INSERT INTO #dbc
EXEC (@execStr
)
SELECT *
FROM #dbc
クライアントマシン上でプロセスのIDを取得することもできます。したがって、プロセス名にマッピングするいくつかの魔法の方法があれば、それを実行できます。
私はかなり可能ではないと確信しています... –