2011-01-12 7 views
0

Ich muss die letzte Anmeldezeit für jeden Benutzer in unserer SQL Server 2005-Datenbank zu verfolgen.Wo Berechtigungen für alle Server für die Anmeldung Trigger auf SQL Server 2005

habe ich einen Auslöser wie folgt aus:

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 

Dieser Trigger funktioniert für Benutzer, die Systemadministratoren sind, aber es wird nicht normale Benutzer anmelden können. Ich habe öffentlich ausgewählt, einfügen und aktualisieren auf die Tabelle, aber das scheint nicht das Problem zu sein. Gibt es eine Möglichkeit, Berechtigungen für den Trigger festzulegen? Gibt es noch etwas, das mir fehlt?

Reguläre Benutzer erhalten die Fehlermeldung:

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). 

Dank

EDIT: Wir haben gerade festgestellt, dass dies nur für Active Directory-Konten geschieht, nicht SQL-Konten.

Zum Beispiel:

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

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

Das Problem ist, dass jeder Benutzer mit einem Login in die Datenbank kein Benutzer in der Miscdb-Datenbank. Wenn sie kein Benutzer in miscdb sind, können sie sich nicht anmelden. Wir möchten nicht daran denken, Benutzer zu dieser Datenbank hinzuzufügen, wenn wir sie zu der Datenbank hinzufügen, die sie benötigen. Gibt es eine Möglichkeit, Rechte für alle Logins des Servers zu vergeben? – Jay

Antwort

1

Zunächst einmal würde ich dringend empfehlen, diese Tabelle zu bewegen, um entweder [Master] oder [msdb]. Es ist sehr problematisch, einen Logon-Trigger zu haben, der von einer Nicht-System-Datenbank abhängig ist.

Zweitens, wenn die aktuelle Frage ist "Wie gewähre ich Rechte für alle Anmeldungen?" Wie in Ihrem Kommentar angegeben, lautet die Antwort: "Gewähren Sie sie der öffentlichen Serverrolle." Jede Anmeldung erfolgt in dieser Rolle, sodass ihre Berechtigungen für alle gelten.

+0

Ich wollte den Tisch nicht in Master, aber es scheint, dass das der einzige Weg ist. Vielen Dank. Es funktioniert jetzt. – Jay

0

CREATE TRIGGER [Logon_Audit_Tgr] auf allen Server MIT AS 'sa' EXECUTE FÜR ANMELDUNG AS BEGIN ....

Verwandte Themen