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.

Consejos semanales de Oracle en tu bandeja de entrada
El boletín gratuito de Oracle de Newsmatic, que se envía todos los miércoles, cubre la automatización de utilidades de Oracle, la generación de alertas de base de datos, la resolución de problemas de grafos dirigidos y más.

¡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 Linux

Luego, 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 usarlo

En 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

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.