Sentencia SET SESSION AUTHORIZATION
La sentencia SET SESSION AUTHORIZATION cambia el valor del registro especial SESSION_USER.
La sentencia no está bajo el control de la transacción. La sentencia SET SESSION AUTHORIZATION tiene como objetivo proporcionar soporte para un sólo usuario, suponiendo que los ID de autorización son distintos en la misma conexión y no se debe utilizar en escenarios en los que distintos usuarios reutilizan la misma conexión, lo que normalmente se denomina agrupación de conexiones.
Invocación
La sentencia puede incorporarse en un programa de aplicación o emitirse interactivamente. Se trata de una sentencia ejecutable que puede prepararse de forma dinámica.
Autorización
Los privilegios que tiene el ID de autorización de la sentencia deben incluir SETSESSIONUSER en el valor de ID de autorización en el que se establece el registro especial.
Sintaxis
Descripción
- nombre-autorización
- Especifica el ID de autorización que se debe utilizar como el nuevo valor para el registro especial SESSION_USER.
- USUARIO
- El valor del registro especial USER.
- CURRENT_USER
- El valor del registro especial CURRENT USER.
- SYSTEM_USER
- El valor del registro especial SYSTEM_USER.
- variable-lenguaje-principal
- Una variable de tipo CHAR o VARCHAR. La longitud del contenido de variable-lenguaje-principal no debe ser mayor 128 bytes (SQLSTATE 28000). No puede establecerse en nulo. Si una variable-lenguaje-principal tiene asociada una variable de indicador, el valor de dicha variable de indicador no debe indicar un valor nulo (SQLSTATE 28000).
Los caracteres de la variable-lenguaje-principal deben alinearse a la izquierda. Cuando se especifica un nombre-autorización con una variable del lenguaje principal, todos los caracteres se deben especificar en mayúsculas, porque no hay conversión a caracteres en mayúsculas.
- constante-serie
- Una constante de serie de caracteres con una longitud máxima de 128 bytes.
- ALLOW ADMINISTRATION
- Especifica que pueden especificarse sentencias de esquema de SQL antes que esta sentencia en la misma unidad de trabajo.
Reglas
- El valor especificado para el registro especial SESSION_USER que cumple con las normas de un ID de autorización de tipo USER (SQLSTATE 42602).
- La opción de vinculación OWNER especifica el ID de autorización que se debe utilizar para sentencias de SQL estático.
- Esta sentencia sólo se puede emitir como la primera sentencia (que no sea una sentencia de registro especial SET) en una nueva unidad de trabajo sin ningún cursor WITH HOLD abierto (SQLSTATE 25001). Esta restricción incluye cualquier petición PREPARE correspondiente a una sentencia que no sea una sentencia de registro especial SET.
- El valor del registro especial SESSION_USER se utiliza como el ID de autorización para todas las sentencias de SQL dinámico de un paquete vinculado con la opción de vinculación DYNAMICRULES(RUN). (Esto incluye INVOKERUN y DEFINERUN cuando el paquete no lo utiliza ninguna rutina). Si un paquete utiliza autorización de propietario, invocador o definidor basado en la opción DYNAMICRULES, esta sentencia no tiene ningún efecto sobre las sentencias de SQL dinámico emitidas desde dentro del paquete.
Notas
- La sentencia SET SESSION AUTHORIZATION le permite modificar el ID de autorización de sesión. El ID de autorización de sesión representa el usuario actual de la conexión y es el ID de autorización que el gestor de bases de datos tiene en cuenta para todas las comprobaciones de autorizaciones relativas al SQL dinámico dentro de un paquete de ejecución DYNAMICRULES. El registro especial SESSION_USER se puede utilizar para visualizar el valor actual de este ID de autorización de sesión.
- El valor inicial del registro especial SESSION_USER para una nueva conexión es el mismo que el valor del registro especial SYSTEM_USER.
- La información de grupo correspondiente al ID de autorización de sesión especificado en esta sentencia se adquiere en el momento de ejecutar la sentencia.
- El hecho de establecer el registro especial SESSION_USER no afecta a los registros especiales CURRENT SCHEMA ni CURRENT PATH.
- Si se produce algún error durante el establecimiento del registro especial SESSION_USER, el registro vuelve a tomar su valor anterior.
- Esta sentencia no se debe utilizar para permitir que varios usuarios diferentes reutilicen la misma conexión, puesto que cada usuario heredará la capacidad de cambiar el valor del registro especial SESSION_USER que tenía el propietario original de la conexión. Esta sentencia depende del valor de SYSTEM_USER correspondiente a la comprobación de privilegios y la sentencia SET SESSION AUTHORIZATION no modifica el ID de autorización de conexión inicial. Además, esta sentencia no está relacionada con los siguientes comportamientos que afectan a la reutilización de la conexión:
- El privilegio CONNECT no se comprueba para el nuevo ID de autorización
- El contenido de cualquier registro especial actualizable no se restablece; en concreto, el contenido del registro especial ENCRYPTION PASSWORD no se modifica y está disponible para el nuevo ID de autorización para las funciones de cifrado y descifrado.
- El contenido de cualquier tabla temporal global declarada no se ve afectado y resulta accesible para el nuevo ID de autorización
- Los enlaces existentes con servidores remotos no se restablecerán
- Si se especifica la cláusula ALLOW ADMINISTRATION, los siguientes tipos de sentencias u operaciones pueden preceder la sentencia SET SESSION AUTHORIZATION:
- Lenguaje de definición de datos (DDL), incluida la definición de los puntos de salvaguarda y la declaración de tablas temporales globales, pero no incluyendo SET INTEGRITY
- Sentencias GRANT y REVOKE
- sentencia LOCK TABLE
- Sentencias COMMIT y ROLLBACK
- SET de registros especiales
- SET de variables globales
ejemplos
- Ejemplo 1: La siguiente sentencia establecer el registro especial SESSION_USER.
SET SESSION_USER = RAJIV - Ejemplo 2: Establezca el ID de autorización de sesión (el registro especial SESSION_USER) de modo que sea un valor del ID de autorización del sistema, que es el ID que ha establecido la conexión en la que se ha emitido la sentencia.
SET SESSION AUTHORIZATION SYSTEM_USER
