SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION — establece el identificador del usuario de sesión y el identificador del usuario actual de la sesión actual

Synopsis

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

Descripción

Este comando establece el identificador del usuario de sesión y el identificador del usuario actual de la sesión SQL actual a user_name. El nombre de usuario se puede escribir como un identificador o como un literal de cadena. Usando este comando, es posible, por ejemplo, convertirse temporalmente en un usuario sin privilegios y luego volver a ser un superusuario.

El identificador del usuario de sesión se establece inicialmente con el nombre de usuario (posiblemente autenticado) provisto por el cliente. El identificador del usuario actual es normalmente igual al identificador del usuario de sesión, pero puede cambiar temporalmente en el contexto de funciones SECURITY DEFINER y mecanismos similares; también se puede cambiar mediante SET ROLE. El identificador del usuario actual es el relevante para la comprobación de permisos.

El identificador del usuario de sesión solo se puede cambiar si el usuario de sesión inicial (el usuario autenticado) tiene el privilegio de superusuario. De lo contrario, el comando se acepta solo si especifica el nombre de usuario autenticado.

Los modificadores SESSION y LOCAL actúan de la misma manera que para el comando regular SET.

Las formas DEFAULT y RESET restablecen los identificadores del usuario de sesión y del usuario actual al nombre de usuario autenticado originalmente. Estas formas pueden ser ejecutadas por cualquier usuario.

Notas

SET SESSION AUTHORIZATION no se puede utilizar dentro de una función SECURITY DEFINER.

Ejemplos

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

Compatibilidad

El estándar SQL permite que aparezcan algunas otras expresiones en lugar del literal user_name, pero estas opciones no son importantes en la práctica. PostgreSQL permite la sintaxis de identificador ("username"), lo cual no permite SQL. SQL no permite este comando durante una transacción; PostgreSQL no hace esta restricción porque no hay razón para hacerlo. Los modificadores SESSION y LOCAL son una extensión de PostgreSQL, al igual que la sintaxis RESET.

Los privilegios necesarios para ejecutar este comando quedan definidos por la implementación según el estándar.

Véase también

SET ROLE