Hoy, estuve analizando la posibilidad de consultar la última hora de inicio de sesión de un usuario. Antes de 12c, había que crear un activador de inicio de sesión para almacenar la hora de inicio de sesión en una tabla o configurar la auditoría y auditar los inicios de sesión exitosos. Ahora, Oracle 12c incluye, de manera predeterminada, una forma de determinar la última vez que alguien inició sesión.
SQL> show user USER is "SYS" SQL> select username,last_login from dba_users 2 where last_login is not null; USERNAME LAST_LOGIN ------------------------------ ---------------------------------------- SYSTEM 30-JUL-13 01.57.19.000000000 PM -05:00 PEASLAND 31-JUL-13 02.15.38.000000000 PM -05:00
Como puede ver, tengo dos usuarios que iniciaron sesión en la base de datos y la fecha/hora en que iniciaron sesión por última vez. Una cosa que noté es que aunque estoy conectado como usuario de SYS, esta columna no está completa para SYS.
Mientras investigo la vista DBA_USERS, veo que además de la columna LAST_LOGIN, también hay otras 3 columnas nuevas en la vista Diccionario de datos, solo una de las cuales había leído anteriormente, ORACLE_MAINTAINED. La columna ORACLE_MAINTAINED indicará un valor Y si el usuario fue creado por Oracle y sus diversos scripts. Actualmente en mi base de datos de prueba, solo tengo uno de esos usuarios.
SQL> select username from dba_users where oracle_maintained<>'Y'; USERNAME ------------------------------ PEASLANDUna nueva columna sobre la que no había leído anteriormente era el usuario PROXY_ONLY_CONNECT. Esta vista le permite ver si un usuario permitirá conexiones proxy. En caso de que no esté familiarizado con las conexiones de proxy, esto podría ayudar a explicarlo. Para obtener más información, visite la Guía de referencia de SQL para ALTER USER y busque "proxy_clause". La última columna nueva en DBA_USERS es COMÚN. No tenía ni idea de para qué era esta columna, así que mi primera parada fue la Guía de referencia para DBA_USERS. La descripción de la columna es "Indica si un usuario dado es común". Bien... ¿qué significa eso? ¿Qué define a un usuario común? Si consulto mi base de datos de prueba, obtengo el siguiente resultado:
SQL> select username,common,oracle_maintained from dba_users; USERNAME COM O ------------------------------ --- - PEASLAND NO N AUDSYS YES Y GSMUSER YES Y SYSKM YES Y XS$NULL YES Y OJVMSYS YES Y ORACLE_OCM YES Y SYSDG YES Y DIP YES Y SYSBACKUP YES Y GSMCATUSER YES Y GSMADMIN_INTERNAL YES Y APPQOSSYS YES Y XDB YES Y WMSYS YES Y DBSNMP YES Y ANONYMOUS YES Y SYS YES Y SYSTEM YES Y OUTLN YES YEntonces, ¿un usuario "común" es uno que se mantiene en Oracle? Si es así, ¿no son redundantes las columnas COMÚN y ORACLE_MAINTAINED? Dudo que Oracle incluya dos columnas que signifiquen lo mismo. Así que me embarqué en una búsqueda para encontrar la respuesta... En la Guía del administrador, hay una pequeña sección titulada "Usuarios comunes y usuarios locales". El usuario común es uno que es común a una base de datos contenedora y a todas las bases de datos conectables existentes y futuras en la nueva arquitectura de base de datos multiusuario de Oracle 12c. Eso tiene sentido ahora.