Cómo utilizar SYS_CONTEXT en Oracle para recuperar datos de usuario y aplicación
Es posible que conozcas la antigua función USERENV, que devolvía valores de sesión como el session_id del usuario, el idioma y si el usuario tenía privilegios de DBA. Aunque USERENV sigue existiendo por razones de compatibilidad, fue reemplazado por una nueva función en Oracle 8i, SYS_CONTEXT.
¡Regístrate automáticamente hoy mismo!
SYS_CONTEXT hace mucho más que solo recuperar datos de USERENV, también puede recuperar valores de datos definidos por aplicaciones. Un contexto de aplicación es un conjunto de nombres (atributos) y datos correspondientes (valores) que pueden ser recuperados por SYS_CONTEXT. Por ejemplo, para recuperar el número de departamento del usuario en una aplicación de recursos humanos, la aplicación podría incluir una línea como esta:
v_dept := SYS_CONTEXT('HR_CONTEXT', 'DEPT');
El disparador de base de datos After Logon introducido en Oracle 9i es una forma sencilla de inicializar los atributos en un contexto de aplicación. Después de que un usuario inicie sesión correctamente en Oracle, se activa el disparador y ejecuta un procedimiento almacenado en el paquete designado para buscar datos y colocarlos en el contexto mediante el procedimiento DBMS_SESSION.SET_CONTEXT.
Existen varias ventajas de este método:
- Mejor rendimiento. Los datos de contexto de la aplicación se almacenan en el SGA, por lo que el acceso evita que la aplicación realice lecturas repetidas de disco para buscar los datos.
- Más seguro. El único código permitido para cambiar o borrar el contexto es un único objeto de código PL/SQL, generalmente un paquete, asociado con el contexto. Es este paquete el que ejecuta el disparador After Logon.
- Más flexible. Puedes crear tantos contextos como necesites y cada uno puede tener un número ilimitado de pares atributo-valor.
El Listado A muestra un paquete PL/SQL llamado HR_CONTEXT_PKG. Su propósito es inicializar el contexto HR_CONTEXT buscando con qué departamento debe asociarse la sesión actual del usuario.
Cómo instalar y configurar Sybase Adaptive Server Enterprise (ASE) en LinuxLuego, puedes utilizar la siguiente instrucción CREATE CONTEXT para crear el espacio de nombres HR_CONTEXT y asociar el paquete a él:
CREATE CONTEXT hr_context USING HR.HR_CONTEXT_PKG;
El siguiente código muestra un Disparador de inicio de sesión (Logon Trigger) que llama al paquete seguro para inicializar el contexto de los usuarios al iniciar sesión. Si hay un error al buscar el departamento correcto, el disparador lo maneja mediante un bloque de EXCEPCIÓN. De lo contrario, los usuarios sin una configuración de departamento no podrían iniciar sesión en absoluto.
CREATE OR REPLACE TRIGGER DBT_LOGON AFTER LOGON ON DATABASE BEGIN HR.HR_CONTEXT_PKG.INITIALIZE_HR_CONTEXT; EXCEPTION WHEN OTHERS THEN NULL; END; /
Como resultado, cualquier aplicación puede averiguar ahora a qué departamento está asociado el usuario actual sin realizar múltiples lecturas lógicas desde una tabla. Por ejemplo:
SELECT SYS_CONTEXT('HR_CONTEXT','DEPT') FROM DUAL;
devolverá el department_id del usuario actual.
¿Te perdiste un consejo?
Visita el archivo de Oracle y ponte al día con nuestros consejos más recientes sobre Oracle.
Qué es sudo y por qué deberías usarloEn Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a Cómo utilizar SYS_CONTEXT en Oracle para recuperar datos de usuario y aplicación , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados