Мне нужно отслеживать время последнего входа в систему для каждого пользователя в нашей базе данных 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).
Спасибо
РЕДАКТИРОВАТЬ: Мы только что заметили, что это происходит только для активного каталогаучетные записи, а не учетные записи sql.
Например:
C:\>osql -S server -E
Logon failed for login 'xxx\xxxx' due to trigger execution.
C:\>osql -S server -U xxxx
Password:
1>