Oracle
 sql >> Database >  >> RDS >> Oracle

12c DBA_USERS Modifiche

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
------------------------------
PEASLAND
Una 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 Y
Quindi 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.