次の方法で共有


ログオン トリガ

新規 : 2006 年 12 月 12 日

ログオン トリガは、LOGON イベントに応答してストアド プロシージャを起動します。このイベントは、SQL Server インスタンスでユーザー セッションが確立されるときに発生します。ログオン トリガは、ログインの認証段階が終了した後、ユーザー セッションが実際に確立されるまでの間に発生します。したがって、通常、エラー メッセージや PRINT ステートメントからのメッセージはユーザーに通知されますが、このトリガ内で発生したすべてのメッセージは SQL Server のエラー ログに記録されます。認証に失敗した場合は、ログオン トリガが作動しません。

ログオン トリガを使用すると、ログインの利用状況を追跡したり、SQL Server へのログインを制限したり、特定のログインのセッション数を制限したりすることで、サーバー セッションを監査し制御できます。たとえば、次のコードでは、ログイン login_test によってユーザー セッションが既に 3 つ生成されている場合、ログオン トリガは、そのログインが開始する SQL Server へのログイン試行を拒否します。

USE master;
GO
CREATE LOGIN login_test WITH PASSWORD = '3KHJ6dhx(0xVYsdf' MUST_CHANGE,
    CHECK_EXPIRATION = ON;
GO
GRANT VIEW SERVER STATE TO login_test;
GO
CREATE TRIGGER connection_limit_trigger
ON ALL SERVER WITH EXECUTE AS 'login_test'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'login_test' AND
    (SELECT COUNT(*) FROM sys.dm_exec_sessions
            WHERE is_user_process = 1 AND
                original_login_name = 'login_test') > 3
    ROLLBACK;
END;

LOGON イベントが AUDIT_LOGIN SQL トレース イベントに対応していることに注意してください。このトレース イベントは、イベント通知で使用できます。トリガとイベント通知の主な相違点は、トリガがイベントと同期的に発生するのに対し、イベント通知は非同期的に発生することです。つまり、セッションが確立されないようにする場合は、ログオン トリガを使用する必要があります。この目的では、AUDIT_LOGIN イベントのイベント通知を使用できません。

ログオン トリガのイベント データのキャプチャ

ログオン トリガ内で使用するために LOGON イベントに関する XML データをキャプチャするには、EVENTDATA 関数を使用します。詳細については、「EVENTDATA 関数の使用」を参照してください。LOGON イベントは、次のイベントのデータ スキーマを返します。

<EVENT_INSTANCE>

    <EventType>event_type</EventType>

    <PostTime>post_time</PostTime>

    <SPID>spid</SPID>

    <ServerName>server_name</ServerName>

<LoginName>login_name</LoginName>

<LoginType>login_type</LoginType>

<SID>sid</SID>

<ClientHost>client_host</ClientHost>

<IsPooled>is_pooled</IsPooled>

</EVENT_INSTANCE>

要素 説明

<EventType>

LOGON を格納します。

<PostTime>

セッションの確立が要求される時刻を格納します。

<SID>

指定されたログイン名のセキュリティ ID 番号 (SID) の Base 64 エンコード形式のバイナリ ストリームを格納します。

<ClientHost>

接続を確立したクライアントのホスト名を格納します。クライアントとサーバーの名前が同じ場合、この値は '&lt;local_machine&gt;' になります。これらの名前が異なる場合、この値はクライアントの IP アドレスになります。

<IsPooled>

接続プールを使用して接続が再利用される場合は 1 になります。それ以外の場合は 0 になります。

ログオン トリガの作成、変更、および削除

ログオン トリガは、どのデータベースからでも作成できますが、サーバー レベルで登録されるため master データベースに存在します。

ログオン トリガを作成するには
ログオン トリガを変更するには
ログオン トリガを削除するには

ログオン トリガに関する情報の取得

ログオン トリガに関するメタデータを表示するには、sys.server_triggers カタログ ビューにクエリを実行します。

参照

概念

ログオン トリガ実行のガイドライン
DDL トリガと DML トリガについて
データベースの設計と作成

ヘルプおよび情報

SQL Server 2005 の参考資料の入手