Permite executar consultas em nome de outro usuário.
EXECUTE AS target_user;
EXECUTE AS target_user subquery;
A primeira forma (sem subquery) estabelece que todas as consultas subsequentes na sessão atual serão executadas em nome do target_user especificado.
A segunda forma (com subquery) executa apenas a subquery especificada em nome do target_user especificado.
Para que ambas as formas funcionem, é necessário que a configuração access_control_improvements.allow_impersonate_user
esteja definida como 1 e que o privilégio IMPERSONATE tenha sido concedido. Por exemplo, os seguintes comandos
GRANT IMPERSONATE ON user1 TO user2;
GRANT IMPERSONATE ON * TO user3;
permitem que o usuário user2 execute comandos EXECUTE AS user1 ... e também permitem que o usuário user3 execute comandos como qualquer outro usuário.
Ao assumir a identidade de outro usuário, a função currentUser() retorna o nome desse outro usuário,
e a função authenticatedUser() retorna o nome do usuário que foi efetivamente autenticado.
SELECT currentUser(), authenticatedUser(); -- retorna "default default"
CREATE USER james;
EXECUTE AS james SELECT currentUser(), authenticatedUser(); -- retorna "james default"
Última modificação em 10 de junho de 2026