Oggi stavo esaminando la possibilità di interrogare l'ora dell'ultimo accesso di un utente. Prima di 12c, era necessario creare un trigger di accesso per memorizzare l'ora di accesso in una tabella o impostare il controllo e il controllo degli accessi riusciti. Ora, Oracle 12c include, per impostazione predefinita, un modo per determinare l'ultima volta che qualcuno ha effettuato l'accesso.
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
Come puoi vedere, ho due utenti che hanno effettuato l'accesso al database e la data/ora in cui hanno effettuato l'ultimo accesso. Una cosa che ho notato è che anche se sono connesso come utente SYS, questa colonna non è popolata per SYS.
Durante l'analisi della vista DBA_USERS, vedo che oltre alla colonna LAST_LOGIN, ci sono anche altre 3 nuove colonne nella vista Dizionario dati, solo una delle quali avevo letto in precedenza, ORACLE_MAINTAINED. La colonna ORACLE_MAINTAINED indicherà un valore Y se l'utente è stato creato da Oracle e dai suoi vari script. Attualmente nel mio database di test, ho solo uno di questi utenti.
SQL> select username from dba_users where oracle_maintained<>'Y'; USERNAME ------------------------------ PEASLANDUna nuova colonna di cui non avevo letto in precedenza era l'utente PROXY_ONLY_CONNECT. Questa visualizzazione ti consente di vedere se un utente consentirà le connessioni proxy. Nel caso in cui non si abbia familiarità con le connessioni proxy, questo potrebbe aiutare a spiegarlo. Per ulteriori informazioni, visita la Guida di riferimento SQL per ALTER USER e cerca "proxy_clause". L'ultima nuova colonna in DBA_USERS è COMMON. Non avevo idea di cosa fosse questa colonna, quindi la mia prima tappa è stata la Guida di riferimento per DBA_USERS. La descrizione della colonna è "Indica se un determinato utente è comune". Ok... cosa significa? Cosa definisce un utente comune? Se eseguo una query sul mio database di test, ottengo il seguente output:
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 YQuindi un utente "comune" è gestito da Oracle? In tal caso, le colonne COMMON e ORACLE_MAINTAINED non sono ridondanti? Dubito che Oracle includa due colonne che significano la stessa cosa. Quindi ho intrapreso una ricerca per trovare la risposta... Nella Guida dell'amministratore, c'è una piccola sezione intitolata "Utenti comuni e utenti locali". L'utente comune è un utente comune a un database contenitore e a tutti i database collegabili esistenti e futuri nella nuova architettura di database multi-tenant di Oracle 12c. Questo ha senso ora.