SQL-Serverログインを使用したユーザーを見つけることはできますか?
SQL-Serverにログオンするためだけにアプリケーションで使用されることになっているSQLログインを悪用する人を疑っているとしましょう。 SQLログインを使用したドメインユーザーはどこにでも記録されていますか?
DMVを使用して、誰がログインしているかを確認できますその時点でですが、これでは履歴情報を取得できません。
SELECT c.session_id AS spid, c.auth_scheme, s.login_name,
s.[Host_name], c.client_net_address
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s ON c.session_id=s.session_id;
このコードをログオントリガーで使用して情報をテーブルに保存できると思いますが、実行中のログが必要な場合は、拡張イベントやトレース(SQL Server Profiler)を確認することをお勧めします。
いいえ、ユーザーがSQL認証ログインを使用してSQL Serverに接続する場合、どのWindowsログインが原因であったかを判別する方法はありません。 SQL Serverは提供された情報のみを記録でき、SQL認証を使用する場合、Windowsログイン/ドメイン/グループ情報はSQL Serverに渡されません。
sys.dm_exec_sessions
やsys.dm_exec_connections
などのDMVを見て、IPアドレスやホスト名などの他のサポート情報を取得できますが、次のようになります。
Windows認証を使用するようにアプリケーションを変更し、SQL認証を完全に無効にしない限り、ユーザーがこのSQL認証ログインとして接続するのを防ぐこともできません。確かに、Host_nameやprogram_nameが目的の値のセット内にない限り、ログインを防止するログオントリガーを設定できますが、これらはなりすましが非常に簡単であるため、この動作が悪意のある場合、オプションはかなり制限されます。
sys.dm_exec_sessions
を使用して、SQLサーバーインスタンスにアプリケーションアカウントで接続しているマシンのホスト名を確認します。ホスト名をユーザーマシンまで追跡できる場合、whooがそのアカウントを使用していることを確認できるはずです。
SELECT Host_name ,
program_name
FROM sys.dm_exec_sessions
WHERE login_name = 'service account'
必要に応じて、このテーブルのスナップショットを15分ごとに作成できますが、(ab)ユーザーがクエリの実行後に直接切断しない限り、session_idはしばらくアクティブのままになる可能性があります。