Heute habe ich mir die Möglichkeit angesehen, die letzte Anmeldezeit eines Benutzers abzufragen. Vor 12c musste man einen Anmelde-Trigger erstellen, um die Anmeldezeit in einer Tabelle zu speichern oder die Überwachung einzurichten und erfolgreiche Anmeldungen zu überwachen. Jetzt enthält Oracle 12c standardmäßig eine Möglichkeit, um festzustellen, wann sich jemand zuletzt angemeldet hat.
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
Wie Sie sehen können, habe ich zwei Benutzer, die sich bei der Datenbank angemeldet haben, und das Datum/die Uhrzeit, zu der sie sich zuletzt angemeldet haben. Eine Sache, die mir aufgefallen ist, ist, dass diese Spalte nicht für SYS.
Bei der Untersuchung der DBA_USERS-Ansicht sehe ich, dass es zusätzlich zur Spalte LAST_LOGIN auch drei weitere neue Spalten in der Data Dictionary-Ansicht gibt, von denen ich zuvor nur eine gelesen hatte, ORACLE_MAINTAINED. Die Spalte ORACLE_MAINTAINED zeigt einen Y-Wert an, wenn der Benutzer von Oracle und seinen verschiedenen Skripten erstellt wurde. Derzeit habe ich in meiner Testdatenbank nur einen solchen Benutzer.SQL> select username from dba_users where oracle_maintained<>'Y';
USERNAME
------------------------------
PEASLAND
Eine neue Spalte, über die ich zuvor noch nichts gelesen hatte, war der Benutzer PROXY_ONLY_CONNECT. In dieser Ansicht können Sie sehen, ob ein Benutzer Proxy-Verbindungen zulässt. Falls Sie mit Proxy-Verbindungen nicht vertraut sind, hilft dies möglicherweise bei der Erklärung. Weitere Informationen finden Sie im SQL-Referenzhandbuch für ALTER USER und suchen Sie nach „proxy_clause“. Die letzte neue Spalte in DBA_USERS ist COMMON. Ich hatte keine Ahnung, wofür diese Kolumne gut war, also war meine erste Anlaufstelle das Referenzhandbuch für DBA_USERS. Die Beschreibung für die Spalte lautet „Gibt an, ob ein bestimmter Benutzer üblich ist“. Ok… was bedeutet das? Was definiert einen gemeinsamen Benutzer? Wenn ich meine Testdatenbank abfrage, erhalte ich die folgende Ausgabe: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
Ist ein „normaler“ Benutzer also ein Benutzer, der von Oracle verwaltet wird? Wenn ja, sind die Spalten COMMON und ORACLE_MAINTAINED nicht redundant? Ich bezweifle, dass Oracle zwei Spalten enthalten würde, die dasselbe bedeuten. Also machte ich mich auf die Suche, um die Antwort zu finden … Im Administratorhandbuch gibt es einen kleinen Abschnitt mit dem Titel „Allgemeine Benutzer und lokale Benutzer“. Der allgemeine Benutzer ist einer, der einer Containerdatenbank und allen bestehenden und zukünftigen Plug-in-Datenbanken in der neuen Multi-Tenant-Datenbankarchitektur von Oracle 12c gemeinsam ist. Das macht jetzt Sinn.