web-dev-qa-db-ja.com

SQLログインを使用している人は誰ですか?

SQL-Serverログインを使用したユーザーを見つけることはできますか?

SQL-Serverにログオンするためだけにアプリケーションで使用されることになっているSQLログインを悪用する人を疑っているとしましょう。 SQLログインを使用したドメインユーザーはどこにでも記録されていますか?

5
Magier

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)を確認することをお勧めします。

3

いいえ、ユーザーがSQL認証ログインを使用してSQL Serverに接続する場合、どのWindowsログインが原因であったかを判別する方法はありません。 SQL Serverは提供された情報のみを記録でき、SQL認証を使用する場合、Windowsログイン/ドメイン/グループ情報はSQL Serverに渡されません。

sys.dm_exec_sessionssys.dm_exec_connectionsなどのDMVを見て、IPアドレスやホスト名などの他のサポート情報を取得できますが、次のようになります。

  • これを行うことができるのは今後のみです。この情報を具体的に収集していない限り、過去を振り返ることはできません(これは、サーバー側のトレース、ログオントリガー、監査、または拡張イベントを使用して行うことができます。 ..)
  • これは、ユーザーがワークステーションからSQL Serverに直接接続する場合にのみ役立ちます。ユーザーがデータセンターのジャンプボックスを使用している場合、または他のマシンに共通にアクセスできる場合は、どのマシンから来たかはわかりますが、その時点でどのWindowsユーザーがボックスにログインしているかはわかりません。 SQL Serverで変更がいつ発生したかが正確にわかっている場合は、その時間をマシンのログと関連付けて、それがどのユーザーであったかを判別できる場合があります。

Windows認証を使用するようにアプリケーションを変更し、SQL認証を完全に無効にしない限り、ユーザーがこのSQL認証ログインとして接続するのを防ぐこともできません。確かに、Host_nameやprogram_nameが目的の値のセット内にない限り、ログインを防止するログオントリガーを設定できますが、これらはなりすましが非常に簡単であるため、この動作が悪意のある場合、オプションはかなり制限されます。

7
Aaron Bertrand

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はしばらくアクティブのままになる可能性があります。

3
Alex