SQL Serverでは、ログオントリガーを使用して、ログインアクティビティの追跡、SQL Serverへのログインの制限、特定のログインのセッション数の制限など、サーバーセッションの監査と制御を行うことができます。
この記事では、ログオントリガーを使用して、特定のログインの同時セッション数を制限する例を示します。
例
これは、特定のログインの同時セッション数を1に制限するログオントリガーの例です。
ログインを作成します:
CREATE LOGIN Marge WITH PASSWORD = 'SQLServer123';
GRANT VIEW SERVER STATE TO Marge;
ログオントリガーを作成します:
CREATE TRIGGER trg_limit_concurrent_sessions
ON ALL SERVER WITH EXECUTE AS 'Marge'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN() = 'Marge' AND
(SELECT COUNT(*) FROM sys.dm_exec_sessions
WHERE is_user_process = 1 AND
original_login_name = 'Marge') > 1
ROLLBACK;
END;
これで、そのユーザーが2番目の接続にログインしようとすると、次のエラーが発生するはずです。
Error message: Logon failed for login 'Marge' due to trigger execution. Changed database context to 'master'. Changed language setting to us_english.
エラーメッセージやPRINT
からのメッセージなど、通常はユーザーに届くトリガー内で発生するすべてのメッセージに注意してください。 ステートメントは、SQLServerエラーログに転送されます。
また、認証が失敗した場合、ログオントリガーは起動しません。