Permite ejecutar consultas en nombre de otro usuario.
EXECUTE AS target_user;
EXECUTE AS target_user subquery;
La primera forma (sin subquery) establece que todas las consultas posteriores de la sesión actual se ejecutarán en nombre del target_user especificado.
La segunda forma (con subquery) ejecuta solo la subquery especificada en nombre del target_user especificado.
Para que ambas formas funcionen, es necesario que la opción de configuración access_control_improvements.allow_impersonate_user
esté establecida en 1 y que se haya otorgado el privilegio IMPERSONATE. Por ejemplo, los siguientes comandos
GRANT IMPERSONATE ON user1 TO user2;
GRANT IMPERSONATE ON * TO user3;
permitir al usuario user2 ejecutar comandos EXECUTE AS user1 ... y también permitir al usuario user3 ejecutar comandos como cualquier usuario.
Al hacerse pasar por otro usuario, la función currentUser() devuelve el nombre de ese otro usuario,
y la función authenticatedUser() devuelve el nombre del usuario que realmente se ha autenticado.
SELECT currentUser(), authenticatedUser(); -- muestra "default default"
CREATE USER james;
EXECUTE AS james SELECT currentUser(), authenticatedUser(); -- muestra "james default"
Última modificación el 10 de junio de 2026