問題タブ [extended-events]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 接続ログ
SQL Server で、データベースへのすべての (成功した) ログイン/接続を記録するログ ファイルを作成します。ログには、最小限以下が含まれている必要があります。
- 接続しているクライアントの IP アドレスとポート
- クライアントのアプリケーション名
- ユーザー名
- データベース名
- 接続時または該当する取引
サーバー トレースはこのすべての情報をキャプチャできる可能性が高いように見えますが、Microsoft は、サーバー トレースは拡張イベントを支持して非推奨であると述べています。
そのため、拡張イベントを使用してこの情報を収集しようとしています。私のテストでは、SQL Server 2017 Developer Edition (Windows 10 の Docker コンテナーで実行) と SSMS v17.7 を使用しています。拡張イベントを作成または表示するときに「sa」としてログインしています。
これまでのところ、拡張イベントを使用してこの情報のほとんどを収集できました。問題は、クライアントの IP とポートを収集することです。どちらかを単独で取得することはできますが、両方を同時に取得することはできません。私が使用している XEvent を以下に示します。2 度記載されていることconnection_accept
は間違いではありません。SQL Server には、実際にはまったく同じ名前の 2 つの異なるイベントがあります (!!!)。
Login
: クライアント IP またはポートを収集するためのオプション (フィールドまたはアクション) はありません。少なくともそれは提供しますclient_hostname
!Logout
: クライアント IP またはポートを収集するためのオプション (フィールドまたはアクション) はありません。これもキャプチャしclient_hostname
ます。connection_accept
:- クライアント IP を収集しますが、最下位のオクテット (192.168.1.XX など) をマスクします!!!
- クライアントポートを収集!良い!
Login
session_id を収集しないため、またはLogout
イベントと関連付けることができません。- Myは、および
EVENT SESSION
のコレクションを指定しますが、これらのフィールド/アクションは収集されたデータに存在しません。:(username
client_app_name
client_hostname
connection_accept
:- クライアント ポートを収集しますが、クライアント IP は収集しません!!!
- session_id があるため、少なくとも関連付けることができ
Login
、Logout
- 注:私はまだこの特定のイベントを実際に捕まえていないので、これ以上のコメントはありません。
これらのイベントはいずれもクライアントの IP アドレスを提供しませんが、クライアントのホスト名を妥当な代替物として受け入れます。ただし、ポート番号を取得することは実際の問題です。ポート番号はイベントでのみ検出され、それをホスト名を持つイベントconnection_accept
に関連付ける明らかな方法はありません。login
つまり、拡張イベントは、この基本的なクライアント IP とポートのペアリングを提供できないようです。それはとても基本的なデータなので、私は間違っていると信じたいです。私が見落としていることについての助けや提案は大歓迎です。
拡張イベント DDL
EVENT SESSION
私がテストしてきたのDDLは次のとおりです。
代替案
拡張イベントとは別に、 "セキュリティ監査" は非推奨ではないもう 1 つのメカニズムです。だから私もこれを試してみようと思った:
これが提供するフィールドには、「クライアント アプリ」、「クライアント IP」、「セッション ID」、およびユーザー名 (つまり、「サーバー プリンシパル名」) がありました。connection_accept
ただし、これをXEventに関連付ける方法はありません。そのため、必要な 2 つの情報 (クライアント IP とポート番号) を抽出する方法はありません。:(
ボーナス
クライアントの IP とポートを収集する以外に、SQL Server のネットワーク トラフィック量の収集にも関心があります。ただし、それを行う方法もまだ見ていません。ヒントをいただければ幸いです。あいまいに関連する投稿しか表示されません。
アップデート
とイベントtask_address
を関連付けるように見えるlogin
グローバルアクション (フィールド) が呼び出されていることに気付きました。したがって、とを組み合わせることで、IP とポートを見つけることができるようになりました。私の唯一の懸念は、私の観察を検証するためのドキュメントが見つからないことです。logout
connection_accept
login:client_hostname
connection_accept:port
task_address
sql-server - デッドロック データを SQL Server のテーブルに格納する
データベースで発生したデッドロックの数に関する毎週のデータを格納するプロシージャを作成し、この出力をテーブルに格納したいのですが、どの方法が最適ですか?
拡張ログを使用してみましたが、その XML 出力をテーブルに保存するにはどうすればよいですか?
前もって感謝します
azure-sql-database - この拡張イベント セッションを作成したのは誰ですか?
Azure SQL データベースで特定の拡張イベント セッションを誰が作成したかを調べるように依頼されました。ただし、DMV を調べると、多くの属性がありますが、いつ、誰によって作成されたかを示すものは何もありません。
これを判別する方法はありますか?
ありがとうございました。