2011-01-12 2 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). 

감사 :

일반 사용자는 오류 메시지가 우리는이 활성 디렉토리 계정이 아닌 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

문제는 데이터베이스에 로그인으로 모든 사용자가 사용자 없다는 것이다 CREATE miscdb 데이터베이스에서. miscdb에있는 사용자가 아닌 경우 로그인 할 수 없습니다. 필요한 데이터베이스에 추가 할 때이 데이터베이스에 사용자를 추가하는 것을 기억하고 싶지는 않습니다. 서버의 모든 로그인에 권한을 부여하는 방법이 있습니까? – Jay

답변

1

첫째, 난 강력하게 당신이 중 하나 [마스터] 또는 [MSDB]이 테이블을 이동하는 것이 좋습니다 것입니다. 비 시스템 데이터베이스에 의존하는 로그온 트리거를 갖는 것은 매우 문제가됩니다.

두 번째로 현재 질문이 "모든 로그인에 권한을 부여하는 방법"인 경우 귀하의 의견에 명시된 바와 같이, 그 대답은 : "공공 서버 역할에 그들을 부여합니다." 모든 로그인은 해당 역할에 있으므로 권한은 모든 사람에게 적용됩니다.

+0

나는 주인에게 테이블을두기를 원하지 않았지만 그것이 유일한 방법 인 것 같다. 감사. 지금 일하고있다. – Jay

0

는 트리거 [Logon_Audit_Tgr] 가 WITH 로 로그온 은 'SA' AS EXECUTE ALL SERVER부터 시작 ....

관련 문제