SET SESSION AUTHORIZATION
SET SESSION AUTHORIZATION (SET SESSION AUTHORIZATION)
현재 세션의 세션 사용자 식별자(session user identifier)와 현재 사용자 식별자(current user identifier)를 설정하는 명령이에요. 예를 들어 일시적으로 권한이 없는 사용자가 되었다가 나중에 다시 수퍼유저로 돌아오는 게 가능해요.
출처: PostgreSQL 문서
본문
개요 (Synopsis)
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION
설명 (Description)
이 명령은 현재 SQL 세션의 세션 사용자 식별자와 현재 사용자 식별자를 *user_name*으로 설정해요. 사용자 이름은 식별자나 문자열 리터럴 어느 쪽으로도 쓸 수 있어요. 예를 들어 이 명령으로 일시적으로 권한이 없는 사용자가 되었다가 나중에 다시 수퍼유저로 돌아올 수 있어요.
세션 사용자 식별자는 처음에 클라이언트가 제공한 (인증된) 사용자 이름으로 설정돼요. 현재 사용자 식별자는 보통 세션 사용자 식별자와 같지만, SECURITY DEFINER 함수의 컨텍스트나 비슷한 메커니즘에서 일시적으로 바뀔 수 있고, SET ROLE로도 바꿀 수 있어요. 현재 사용자 식별자는 권한 검사에 관련돼요.
세션 사용자 식별자는 초기 세션 사용자(즉 인증된 사용자)가 수퍼유저 권한을 가질 때만 바꿀 수 있어요. 그렇지 않으면 인증된 사용자 이름을 지정할 때만 이 명령이 받아들여져요.
SESSION과 LOCAL 수정자는 일반 SET 명령과 같은 방식으로 동작해요.
DEFAULT와 RESET 형태는 세션 및 현재 사용자 식별자를 원래 인증된 사용자 이름으로 재설정해요. 이 형태는 아무 사용자나 실행할 수 있어요.
참고 (Notes)
SET SESSION AUTHORIZATION는 SECURITY DEFINER 함수 안에서는 사용할 수 없어요.
예시 (Examples)
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | peter
SET SESSION AUTHORIZATION 'paul';
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
paul | paul
호환성 (Compatibility)
SQL 표준은 리터럴 user_name 대신 쓸 수 있는 다른 표현을 허용하지만, 실용적으로는 중요하지 않아요. PostgreSQL은 SQL이 허용하지 않는 식별자 구문("username)을 허용해요. SQL은 트랜잭션 중에는 이 명령을 허용하지 않지만, PostgreSQL은 그렇게 할 이유가 없어서 그 제한을 두지 않아요. SESSION과 LOCAL 수정자와 RESET 구문은 PostgreSQL 확장 기능이에요.
이 명령을 실행하는 데 필요한 권한은 표준에서 구현 정의로 남겨져 있어요.