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