EXECUTE AS와 SETUSER

SQL Server에서 문자열, 명령 또는 모듈이 실행되는 컨텍스트는 EXECUTE AS 문을 사용하여 명시적으로 설정될 수 있습니다. EXECUTE AS는 SETUSER 문을 대체합니다. 컨텍스트 전환 방법은 컨텍스트 전환 이해를 참조하십시오.

컨텍스트 변환 기능 비교

SETUSER 문과 비교하여 EXECUTE AS에는 다음과 같은 이점이 있습니다.

  • sa 또는 dbo 이외의 서버 또는 데이터베이스 보안 주체는 EXECUTE AS를 호출할 수 있습니다.

    EXECUTE AS 문을 호출하는 사용자는 대상 보안 주체에 대한 IMPERSONATE 권한이 있어야 합니다.

    SETUSER는 sysadmin 고정 서버 역할 또는 db_owner 고정 데이터베이스 역할의 멤버로 제한됩니다.

  • 가장 범위는 문에 명시적으로 정의됩니다.

    지정된 보안 주체는 서버 수준의 가장인 LOGIN이나 데이터베이스 수준의 가장인 USER로 지정됩니다.

    SETUSER 문의 가장 범위는 내재적입니다. sysadmin의 멤버가 문을 호출한 경우 서버 수준의 가장이 사용됩니다. dbo인 계정이 문을 호출한 경우 데이터베이스 수준의 가장이 사용됩니다.

  • 다음 중 하나가 발생하기 전까지 가장이 계속 유지됩니다.

    • 세션이 삭제됩니다.

    • 컨텍스트가 다른 로그인 또는 사용자로 전환됩니다.

    • 컨텍스트는 이전 실행 컨텍스트로 되돌려집니다.

    SETUSER에서는 다음 중 하나가 발생하기 전까지 가장이 계속 유지됩니다.

    • 다른 SETUSER 문이 실행됩니다.

    • 현재 데이터베이스가 dbo 또는 sysadmin 고정 서버 역할의 멤버인 계정에 의해 USE 문으로 변경됩니다.

  • 여러 보안 주체에서 EXECUTE AS 문을 여러 번 호출하여 실행 컨텍스트 스택을 만들 수 있습니다. 호출 시 REVERT 문은 컨텍스트를 컨텍스트 스택의 다음 수준에 있는 로그인 또는 사용자로 전환합니다. 자세한 내용은 EXECUTE AS(Transact-SQL)를 참조하십시오.

    SETUSER는 실행 컨텍스트 스택 생성을 허용하지 않습니다.

이전 컨텍스트로 되돌리기

EXECUTE AS

REVERT 문을 사용하여 이전 컨텍스트로 돌아갑니다. REVERT 문의 호출자는 가장이 발생한 같은 데이터베이스에 있어야 합니다.

SETUSER

이전 컨텍스트로 되돌아가려면 사용자 이름을 지정하지 않고 SETUSER 문을 사용합니다.