Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Área de Tecnologías de la Información y las Comunicaciones Aplicadas Universidad de Murcia
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
ATICA arrow Consultoria arrow DBconnector arrow SQL - Atributo CLIENT_IDENTIFIER del contexto USERENV para identificar sesiones
24.05.2012
 
 
SQL - Atributo CLIENT_IDENTIFIER del contexto USERENV para identificar sesiones Imprimir E-mail

Desde la versión 9i, Oracle proporciona el atributo CLIENT_IDENTIFIER, dentro del Contexto USERENV. Esto es muy útil para aquellas aplicaciones que llevan una gestión de usuarios independiente de la BD, de modo que el atributo CLIENT_IDENTIFIER puede usarse para capturar cualquier valor que la aplicación necesite para identificar al usuario, o para controlar el acceso a los datos.

Asignar un valor al atributo CLIENT_IDENTIFIER es muy sencillo, y se puede hacer tanto desde SQL o PL/SQL, como desde JDBC:

  • Desde SQL o PL/SQL basta con usar el procedimiento DBMS_SESSION.SET_IDENTIFIER(). También existe el procedimiento DBMS_SESSION.CLEAR_IDENTIFIER para limpiar el valor del citado atributo.
  • Y desde JDBC, con el método setClientIdentifier() de oracle.jdbc.OracleConnection. Análogmente al caso anterior, existe el método clearClientIdentifier() para borrar el contenido del atributo CLIENT_IDENTIFIER.
Una vez asignado un valor al atributo CLIENT_IDENTIFIER, para manejarlo desde SQL o PL/SQL hay que usar la función SYS_CONTEXT('USERENV','CLIENT_IDENTIFIER').

Ejemplo:

Veamos directamente desde SQL, como usar el atributo CLIENT_IDENTIFIER para guardar, por ejemplo, la dirección de correo del usuario conectado; para posteriormente usarla en cualquier sentencia SQL:

SQL> exec dbms_session.set_identifier('usuario@dominio.com')
PL/SQL procedure successfully completed
...
SQL> select sys_context('USERENV','CLIENT_IDENTIFIER') from dual;
SYS_CONTEXT('USERENV','CLIENT_IDENTIFIER')
--------------------------------------------------------------------------------
usuario@dominio.com

...
SQL>
  declare
     email varchar2(30);
  begin
     select sys_context('USERENV','CLIENT_IDENTIFIER') into email from dual;
     dbms_output.put_line(email);
  end;
  /
usuario@dominio.com

Como se observa en el ejemplo, en cualquier momento de la sesión, podemos asignar cualquier valor al atributo CLIENT_IDENTIFIER, para utilizarlo posteriormente.

Enlaces de interés:

Última modificación ( 16.03.2011 )
 
Área de Tecnologías de la Información y las Comunicaciones Aplicadas
Volver al incio del documento Volver al inicio del documento
Área de Tecnologías de la Información y las Comunicaciones Aplicadas