|
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:
|