web-dev-qa-db-ja.com

ストアドプロシージャを呼び出したプログラムを特定するにはどうすればよいですか?

アプリケーションデータベースの設計仕様の一部として、SSMS/osql/sqlcmdなどから直接呼び出された場合、一連のストアドプロシージャの実行をブロックするように求められました。つまり、アプリケーション自体からのみ実行を許可する必要があります。

私たちのチームがこれが可能かどうか質問したところ、クエリを特定のシステムに制限するデモが表示されました(実際にはクエリを実行できましたが、実行元のテーブルにログが記録されました)。しかし、それを行う手順は暗号化されているため、どのように行われたのかはわかりませんでした。

これをどのように達成しますか?

4
user52302

この情報を取得する複数の方法:

SELECT APP_NAME();

SELECT PROGRAM_NAME();

SELECT [program_name] 
  FROM sys.dm_exec_sessions 
  WHERE session_id = @@SPID;

canが接続文字列またはManagement Studioの接続プロパティで偽装されることに注意してください。次のパラメーターを使用して接続すると、上記の3つすべてがfoobarを返します。

enter image description here

7
Aaron Bertrand