2012-09-21 2 views
1

실행시 특정 데이터베이스에 정보를 저장할 임의의 데이터베이스에 트리거를 설정하려고합니다. 그러나 해당 데이터베이스에 대한 명시 적 액세스가없는 사람이 트리거를 트리거하면 트리거 실행이 실패하는 것으로 나타났습니다.다른 데이터베이스 테이블에 대한 전체 액세스 트리거 [T-SQL]

CREATE TRIGGER [myTrigger] 
on database 
with execute as 'UserWithPermissions' 

을하지만이 가능한 경우 누구나 알고 있나요 ... 중 하나가 작동하지 않는 것 :

나는이 사용 주위에 멀리 찾을 기대했다? 모든 포인터 크게 감사하겠습니다. 감사.

+0

트리거가 모든 데이터베이스에 액세스 할 수 있도록하는 것이 좋지 않은 생각입니다. 데이터베이스는 SQL Server의 복구/가용성 단위입니다. 원래 트랜잭션이 커밋되지 않도록이 두 번째 데이터베이스를 언제든지 사용할 수 없습니까? 일반적으로 외부 트랜잭션을 원래 트랜잭션에서 분리하기 위해 무언가 (큐 테이블과 에이전트 작업 또는 Service Broker)를 사용하는 것이 좋습니다. –

답변

0

MSSQL 관리에서 DB 이름 => 보안 => 사용자로 이동하여 사용자가 액세스 할 수 있는지 확인하십시오.

난 당신이 'AS를 EXECUTE'라고 싶은 생각 - 편집 - 기타 기계

에서 발동을 실행할 때 또한 Windows 네트워크 인증은 많은 도움이됩니다.

CREATE PROCEDURE dbo.usp_Demo 
WITH EXECUTE AS 'SqlUser1' 
AS 
SELECT user_name(); -- Shows execution context is set to SqlUser1. 
EXECUTE AS CALLER; 
SELECT user_name(); -- Shows execution context is set to SqlUser2, the caller of the module. 
REVERT; 
SELECT user_name(); -- Shows execution context is set to SqlUser1. 
GO 
+0

좀 더 자세히 설명해 주시겠습니까? 내가 실행 _did_ 내 게시물에대로 실행하지만 작동하지 않았다. –

+0

MSSQL 관리에서 * DB-name * => Security => Users로 이동하여 사용자에게 액세스 권한이 있는지 확인하십시오. 또한 Windows 네트워크 인증은 다른 컴퓨터에서 procs를 실행할 때 많은 도움이됩니다. – runexec

+0

그게 문제 야 ... 데이터베이스에이 트리거를 만들 때마다 트리거가 삽입되는 것에 대한 액세스 권한을 가진 사용자가 생성되었는지 확인해야합니까? 이상적으로, 나는 항상 트리거가 사용자를 조작 할 필요없이 대상에 대한 액세스를 원할 것입니다. –

관련 문제