2011-01-12 8 views
0

SQL Server 2005データベースの各ユーザーの最終ログイン時刻を記録する必要があります。SQL Server 2005のログオントリガー用にすべてのサーバーにアクセス許可を設定する場所

CREATE TRIGGER LogonTimeStamp 
ON ALL SERVER FOR LOGON 
AS 
BEGIN 
    IF EXISTS (SELECT * FROM miscdb..user_last_login WHERE user_id = SYSTEM_USER) 
    UPDATE miscdb..user_last_login SET last_login = GETDATE() WHERE user_id = SYSTEM_USER 
    ELSE 
    INSERT INTO miscdb..user_last_login (user_id,last_login) VALUES (SYSTEM_USER,GETDATE()) 
END; 
go 

このトリガは、システム管理者であるユーザーのために動作しますが、それは通常のユーザーはログインできません。

は、私はこのようなトリガーを作成しました。私はパブリックの選択、挿入、テーブルへの更新を許可しましたが、それは問題ではないようです。トリガーにアクセス許可を設定する方法はありますか?私は行方不明の何か他のものがありますか?

Logon failed for login 'xxxx' due to trigger execution. 
Changed database context to 'xxxx', 
Changed language setting to us_english. (Microsoft SQL Server, Error: 17892). 

おかげ

EDIT:

通常のユーザーは、エラーメッセージが表示されます私たちは、ただ、これが唯一のActive Directoryアカウントではなく、SQLのアカウントのために起こることに気づきました。例えば

:すべての

C:\>osql -S server -E 
Logon failed for login 'xxx\xxxx' due to trigger execution. 

C:\>osql -S server -U xxxx 
Password: 
1> 
+0

問題は、データベースへのログインを持つすべてのユーザーがユーザーではないということですmiscdbデータベースに保存します。 miscdbのユーザでない場合、ログインできません。必要なデータベースにユーザーを追加するときに、このデータベースにユーザーを追加することを忘れたくはありません。サーバーのすべてのログインに権限を与える方法はありますか? – Jay

答えて

1

まず、私は強くあなたが[マスター]または[MSDB]のいずれかに、このテーブルを移動することをお勧めします。非システムデータベースに依存するログオントリガーを持つことは非常に問題です。

第2に、現在の質問が「すべてのログインに権限を与える方法」の場合あなたのコメントに記載されているように、答えは: "パブリックサーバーの役割にそれらを与える。すべてのログインはその役割に含まれているため、その権限は全員に適用されます。

+0

私はテーブルにマスターを載せたくありませんでしたが、それが唯一の方法だと思われます。ありがとう。それは今働いている。 – Jay

0

[Logon_Audit_Tgr]すべてのサーバー WITHから始まる AS LOGON のための 'SA' AS EXECUTE CREATE TRIGGERを....

関連する問題