EXECUTE AS를 사용하여 사용자 지정 권한 집합 만들기

사용자 지정 권한 집합을 정의할 때 모듈에 실행 컨텍스트를 지정하면 큰 도움이 됩니다. 예를 들어 TRUNCATE TABLE 등의 일부 동작에는 부여할 수 있는 권한이 없습니다. TRUNCATE TABLE을 실행하려면 사용자가 지정된 테이블에 대한 ALTER 권한을 가지고 있어야 합니다. 사용자가 너무 큰 권한을 갖게 되어 테이블을 자를 수도 있으므로 사용자에게 테이블에 대한 ALTER 권한을 부여하는 것은 최상의 방법이 아닙니다.

TRUNCATE TABLE 문을 모듈에 통합하고 테이블 수정 권한을 가진 사용자로 모듈이 실행되도록 지정하면 테이블 자르기 권한을 모듈에 대해 EXECUTE 권한을 부여한 사용자에게로 확장할 수 있습니다.

다음과 같은 저장 프로시저를 고려할 수 있습니다.

CREATE PROCEDURE TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;

Mary가 이 프로시저를 만들고 Scott에게 TruncateMyTable에 대한 실행 권한을 부여한다고 가정합니다. Scott이 저장 프로시저를 실행하면 데이터베이스 엔진에서 해당 권한을 확인하여 Mary가 저장 프로시저를 실행하고 있을 때와 동일하게 테이블을 자를 수 있습니다. 테이블 소유자가 Mary이기 때문에 Scott에게 테이블에 대한 직접적인 권한이 없더라도 문이 성공적으로 실행됩니다. Mary는 Scott에게 필요 이상의 권한을 부여하지 않고도 신속하고 효과적으로 그에게 권한을 확장한 것입니다.