ID de autorización y SQL dinámico
La opción de vinculación DYNAMICRULES determina el ID de autorización que se utiliza para comprobar la autorización cuando se procesan sentencias de SQL dinámico. El conjunto de valores para el ID de autorización y otros atributos SQL dinámicos se denomina comportamiento de la instrucción SQL dinámica. Los cuatro comportamientos posibles son ejecución, vinculación, definición e invocación.
Este debate se aplica a las sentencias SQL dinámicas que hacen referencia a objetos en el servidor actual. Para aquellos que se refieren a objetos en otros lugares, consulte ID de autorización y ejecución remota.
Además de determinar el ID de autorización, DYNAMICRULES también controla otros atributos dinámicos de SQL, como el calificador implícito que se utiliza para los nombres de alias, índices, secuencias, tablas, desencadenadores y vistas no calificados; el origen de las opciones de programación de aplicaciones; y si ciertas sentencias SQL pueden invocarse dinámicamente.
| Valor de DYNAMICRULES | Comportamiento de las sentencias de SQL dinámico | |
|---|---|---|
| Entorno de programa independiente | Función definida por el usuario o entorno de procedimiento almacenado | |
| EJECUTAR | Ejecute | Ejecute |
| BIND | Vincular | Vincular |
| DEFINERUN | Ejecute | Definir |
| DEFINEBIND | Vincular | Definir |
| INVOKERUN | Ejecute | invocar |
| INVOKEBIND | Vincular | invocar |
Nota : Los valores BIND y RUN pueden especificarse para paquetes, planes y procedimientos SQL nativos. Los demás valores pueden especificarse para paquetes y procedimientos SQL nativos, pero no para planes.
|
||
En las siguientes descripciones de comportamiento, un paquete que se ejecuta bajo una función definida por el usuario o un paquete de procedimiento almacenado es un paquete cuyo programa asociado cumple una de las siguientes condiciones:
- El programa es llamado por una función definida por el usuario o un procedimiento almacenado.
- El programa está en una serie de llamadas anidadas que comienzan con una función definida por el usuario o un procedimiento almacenado.
- Comportamiento de ejecución
- Db2 utiliza los ID de autorización del proceso de aplicación y el ID de autorización SQL (el valor del registro especial CURRENT SQLID) para la comprobación de autorización de las sentencias SQL dinámicas. Si el proceso se ejecuta en un contexto de confianza con un rol asociado al ID de autorización principal, los ID de autorización del proceso de solicitud incluyen este rol.
Un proceso que utiliza un plan y sus paquetes asociados se denomina proceso de solicitud. En cualquier momento, el ID de autorización SQL es el valor de CURRENT SQLID. Este registro especial SQL puede ser inicializado por la rutina de salida de conexión o inicio de sesión. Si la rutina de salida no establece un valor, el valor inicial de CURRENT SQLID es el ID de autorización principal del proceso. Puede utilizar la instrucción SQL SET CURRENT SQLID para cambiar el valor de CURRENT SQLID. A menos que algún ID de autorización del proceso tenga autoridad SYSADM, el nuevo valor debe ser uno de los ID de autorización del proceso. Por lo tanto, CURRENT SQLID suele contener el ID de autorización principal del proceso o uno de sus ID de autorización secundarios. El CURRENT SQLID no puede contener un rol.
Conjunto de privilegios
Si la instrucción preparada dinámicamente no es una instrucción CREATE, GRANT o REVOKE, cada privilegio requerido para la instrucción puede ser un privilegio designado por cualquier ID de autorización del proceso. Por lo tanto, el conjunto de privilegios es la unión del conjunto de privilegios que posee cada ID de autorización del proceso. Cuando el proceso se ejecuta en un contexto de confianza con un rol, los ID de autorización del proceso incluyen este rol.
Si la instrucción SQL dinámica es una instrucción CREATE, GRANT o REVOKE, el único ID de autorización que se utiliza para la comprobación de la autorización es el ID de autorización SQL. Por lo tanto, el conjunto de privilegios son los privilegios que posee ese único ID de autorización del proceso. Si el proceso se ejecuta en un contexto de confianza utilizando la cláusula ROLE AS OBJECT OWNER para una instrucción CREATE, GRANT o REVOKE, el único ID de autorización del proceso que se comprueba es el rol que está en vigor.

- Calificación implícita
- Cuando se prepara dinámicamente una instrucción SQL, los valores del registro especial CURRENT SCHEMA se utilizan como calificador implícito. Por ejemplo, se utiliza como calificador implícito para todas las tablas, alias, vistas, índices y secuencias no calificados. Para obtener más información, consulte Resolución de nombres de objetos no cualificados.
- Comportamiento de vinculación
- Las mismas reglas que se utilizan para determinar el ID de autorización para las declaraciones estáticas (integradas) se utilizan para las declaraciones dinámicas. Db2 utiliza el ID de autorización del propietario del paquete o plan para la comprobación de autorizaciones de sentencias SQL dinámicas, como se explica en ID de autorización y preparación de sentencias.
- Conjunto de privilegios
- El conjunto de privilegios son los privilegios que posee el propietario del paquete o plan.
- Calificación implícita
- El identificador especificado en la opción QUALIFIER del comando bind que se utiliza para vincular las sentencias SQL, o la sentencia CREATE PROCEDURE o ALTER PROCEDURE que se utiliza para crear una versión de un procedimiento SQL, es el calificador implícito para todas las tablas, vistas, alias, índices y secuencias no calificados. Si la opción CALIFICADOR no se utilizó cuando se creó o se modificó por última vez el plan, el paquete o el procedimiento SQL nativo, el calificador implícito es el propietario del plan, el paquete o el procedimiento SQL nativo.
- Definir comportamiento
- Definir comportamiento se aplica solo si la instrucción SQL dinámica está en un paquete que se ejecuta como un procedimiento almacenado o una función definida por el usuario (o se ejecuta bajo un procedimiento almacenado o un paquete de funciones definidas por el usuario), y el paquete se vinculó con DYNAMICRULES(DEFINEBIND) o DYNAMICRULES(DEFINERUN). Db2 utiliza el ID de autorización del propietario del procedimiento almacenado o de la función definida por el usuario (el definidor) para la comprobación de la autorización de las sentencias SQL dinámicas en el paquete de la aplicación.
- Conjunto de privilegios
- El conjunto de privilegios son los privilegios que posee el ID de autorización del propietario.
- Calificación implícita
- El propietario del procedimiento almacenado o de la función definida por el usuario también es el calificador implícito. Por ejemplo, el propietario es el calificador implícito para nombres de tabla, vista, alias, índice y secuencia no calificados.
- Comportamiento de invocación
- El comportamiento de invocación solo se aplica si la sentencia SQL dinámica está en un paquete que se ejecuta como un procedimiento almacenado o una función definida por el usuario (o se ejecuta bajo un procedimiento almacenado o un paquete de funciones definidas por el usuario), y el paquete se vinculó con DYNAMICRULES(INVOKEBIND) o DYNAMICRULES(INVOKERUN). Db2 utiliza el procedimiento almacenado o el invocador de funciones definido por el usuario para la comprobación de la autorización de las sentencias SQL dinámicas en el paquete de la aplicación. El invocador también puede ser un rol.
- Conjunto de privilegios
- El conjunto de privilegios son los privilegios que posee el invocador. Sin embargo, si el invocador es el ID de autorización principal del proceso o el valor CURRENT SQLID, también se comprueban los ID de autorización secundarios. Esto incluye la función del ID de autorización principal, si se ejecuta en un contexto de confianza con una función. En ese caso, el conjunto de privilegios es la unión del conjunto de privilegios que posee cada ID de autorización del proceso.
- Calificación implícita
- El procedimiento almacenado o el invocador de función definido por el usuario también es el calificador implícito. Por ejemplo, es el calificador implícito para nombres de tablas, vistas, alias, índices y secuencias no calificados. El invocador también puede ser un rol.
Sentencias restringidas cuando no se aplica el comportamiento de ejecución
Cuando el comportamiento de vincular, definir o invocar está en vigor, no puede utilizar las siguientes sentencias SQL dinámicas: ALTER, CREATE, COMMENT, DROP, GRANT, RENAME y REVOKE.