Idag tittade jag på möjligheten att fråga en användares senaste inloggningstid. Före 12c var man tvungen att skapa en inloggningstrigger för att lagra inloggningstiden i en tabell eller ställa in revision och granska framgångsrika inloggningar. Nu innehåller Oracle 12c, som standard, ett sätt att avgöra när någon senast loggade in.
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
Som ni ser har jag två användare som har loggat in i databasen och vilket datum/tid de loggade in senast. En sak jag märkte är att även om jag är ansluten som SYS-användare så är denna kolumn inte ifylld för SYS.
När jag undersöker vyn DBA_USERS ser jag att förutom kolumnen LAST_LOGIN, finns det även 3 andra nya kolumner i vyn Data Dictionary, av vilka jag bara hade läst en tidigare, ORACLE_MAINTAINED. Kolumnen ORACLE_MAINTAINED kommer att indikera ett Y-värde om användaren skapades av Oracle och dess olika skript. För närvarande i min testdatabas har jag bara en sådan användare.
SQL> select username from dba_users where oracle_maintained<>'Y'; USERNAME ------------------------------ PEASLANDEn ny kolumn som jag inte tidigare läst om var PROXY_ONLY_CONNECT-användaren. Den här vyn låter dig se om en användare tillåter proxyanslutningar. Om du inte är bekant med proxyanslutningar kan detta hjälpa dig att förklara det. För mer information, besök SQL Reference Guide for ALTER USER och sök efter "proxy_clause". Den sista nya kolumnen i DBA_USERS är COMMON. Jag hade ingen aning om vad den här kolumnen var till för så mitt första stopp var referensguiden för DBA_USERS. Beskrivningen för kolumnen är "Anger om en given användare är vanlig". Ok….vad betyder det? Vad definierar en vanlig användare? Om jag frågar min testdatabas får jag följande utdata:
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 YSå är en "vanlig" användare en som underhålls av Oracle? Om så är fallet, är inte kolumnerna COMMON och ORACLE_MAINTAINED överflödiga? Jag tvivlar på att Oracle skulle inkludera två kolumner som betyder samma sak. Så jag inledde en sökning för att hitta svaret ... I administratörsguiden finns det ett litet avsnitt med titeln "Vanliga användare och lokala användare". Den gemensamma användaren är en som är gemensam för en containerdatabas och alla befintliga och framtida pluggbara databaser i Oracle 12cs nya multi-tenant databasarkitektur. Det är vettigt nu.