Перейти к основному содержанию
Перейти к основному содержанию

Оператор EXECUTE AS

Позволяет выполнять запросы от имени другого пользователя.

Синтаксис

EXECUTE AS target_user;
EXECUTE AS target_user subquery;

Первая форма (без subquery) означает, что все последующие запросы в текущей сессии будут выполняться от имени указанного target_user.

Вторая форма (с subquery) выполняет только указанный subquery от имени указанного target_user.

Для работы обеих форм необходимо, чтобы параметр сервера 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"