Где установить разрешения для всех серверов для входа триггера на SQL Server 2005 - PullRequest
0 голосов
/ 12 января 2011

Мне нужно отслеживать время последнего входа в систему для каждого пользователя в нашей базе данных 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>

Ответы [ 2 ]

1 голос
/ 12 января 2011

Прежде всего, я настоятельно рекомендую переместить эту таблицу либо в [master], либо в [msdb]. Наличие триггера входа в систему, зависящего от любой несистемной базы данных, очень проблематично.

Во-вторых, если текущий вопрос «Как предоставить права всем логинам?» как указано в вашем комментарии, тогда ответ таков: «Предоставьте им роль публичного сервера». Каждый логин находится в этой роли, поэтому его разрешения распространяются на всех.

0 голосов
/ 29 августа 2013

CREATE TRIGGER [Logon_Audit_Tgr] НА ВСЕХ СЕРВЕРАХ, ВЫПОЛНЯТЬ КАК 's' ДЛЯ ЛОГОНА КАК НАЧАТЬ ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...