문제

나는 본다 T-SQL 동의어에 권한을 적용 할 수 있지만 동의어를 가지고 놀 때 기본 객체에 이미 권한을 부여한 경우 그렇게해야 할 때는 확실하지 않습니다.

예를 들어. 데이터베이스 A에 데이터베이스 B의 테이블 FRED를 가리키는 동의어가있는 경우, 사용자 Joe가 [Fred]에서 선택되는 한 [B] Joe는 [Fred]에서 *를 선택할 수 있습니다. 비].

도움이 되었습니까?

해결책

동의어 사용 (데이터베이스 엔진)

다음 권한 진술은 기본 대상이 아닌 동의어와 관련이 있습니다.

이후, 소유권 체인 적용됩니다.

체인을 통해 객체에 액세스 할 때 SQL Server는 먼저 오브젝트의 소유자를 호출 객체의 소유자와 비교합니다. 이것은 체인의 이전 링크입니다. 두 개체 모두 동일한 소유자가있는 경우 참조 된 객체에 대한 권한은 평가되지 않습니다.

CREATE SYNONYM dbo.FooBar FOR dbo.MyBaseProc
GO
GRANT EXECUTE ON dbo.FooBar TO MyUser
GO
REVOKE EXECUTE ON dbo.MyBaseProc TO MyUser
GO
EXEC AS USER = 'MyUser'
GO
PRINT '1'
EXEC dbo.MyBaseProc --fail
GO
PRINT '2'
EXEC dbo.bob    --pass
GO
REVERT
GO


DENY EXECUTE ON dbo.MyBaseProc TO MyUser
GO
PRINT '3'
EXEC AS USER = 'MyUser'
GO
EXEC dbo.bob    --pass, 'coz DENY aint checked...
GO
REVERT
GO

편집 : 당신의 질문에 답했으면 좋겠어요 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top