Позволяет выполнять запросы от имени другого пользователя.
EXECUTE AS target_user;
EXECUTE AS target_user subquery;
Первая форма (без subquery) задаёт, что все последующие запросы в текущем сеансе будут выполняться от имени указанного target_user.
Вторая форма (с subquery) выполняет только указанный subquery от имени указанного target_user.
Для работы обеих форм требуется, чтобы параметр конфигурации access_control_improvements.allow_impersonate_user
был установлен в 1, а привилегия IMPERSONATE — выдана. Например, следующие команды
GRANT IMPERSONATE ON user1 TO user2;
GRANT IMPERSONATE ON * TO user3;
разрешить пользователю user2 выполнять команды EXECUTE AS user1 ..., а также разрешить пользователю user3 выполнять команды от имени любого пользователя.
При работе от имени другого пользователя функция currentUser() возвращает имя этого пользователя,
а функция authenticatedUser() возвращает имя пользователя, который фактически прошёл аутентификацию.
SELECT currentUser(), authenticatedUser(); -- выводит "default default"
CREATE USER james;
EXECUTE AS james SELECT currentUser(), authenticatedUser(); -- выводит "james default"
Последнее изменение 10 июня 2026 г.