Dzisiaj przyglądałem się możliwości zapytania o czas ostatniego logowania użytkownika. Przed 12c trzeba było utworzyć wyzwalacz logowania do przechowywania czasu logowania w tabeli lub skonfigurować inspekcję i inspekcję udanych logowań. Teraz Oracle 12c domyślnie umożliwia określenie ostatniego logowania.
SQL> pokaż userUSER to "SYS"SQL> select username,last_login z dba_users2 gdzie last_login nie ma wartości NULL;USERNAME LAST_LOGIN--------------------------- ------- ----------------------------------------SYSTEM 30- LIP-13 01.57.1900000000 -15:00 GROSZ 31-LIP-13 02.15.380.000000000 -05:00
Jak widać, mam dwóch użytkowników, którzy zalogowali się do bazy danych i datę/godzinę ostatniego logowania. Zauważyłem, że chociaż jestem podłączony jako użytkownik SYS, ta kolumna nie jest wypełniona dla SYS.
Badając widok DBA_USERS, widzę, że oprócz kolumny LAST_LOGIN są też 3 inne nowe kolumny w widoku Data Dictionary, z których tylko jedna, o której wcześniej czytałem, ORACLE_MAINTAINED. Kolumna ORACLE_MAINTAINED wskaże wartość Y, jeśli użytkownik został utworzony przez Oracle i jego różne skrypty. Obecnie w mojej testowej bazie danych mam tylko jednego takiego użytkownika.
SQL> wybierz nazwę użytkownika z dba_users, gdzie oracle_maintained<>'Y';NAZWA UŻYTKOWNIKA------------------------------PESLANDJedna nowa kolumna, o której wcześniej nie czytałem, to użytkownik PROXY_ONLY_CONNECT. Ten widok pozwala sprawdzić, czy użytkownik zezwoli na połączenia proxy. Jeśli nie znasz połączeń proxy, może to pomóc w wyjaśnieniu tego. Aby uzyskać więcej informacji, zapoznaj się z podręcznikiem SQL Reference Guide dla ALTER USER i wyszukaj „proxy_clause”. Ostatnia nowa kolumna w DBA_USERS to COMMON. Nie miałem pojęcia, do czego służy ta kolumna, więc moim pierwszym przystankiem był Przewodnik informacyjny dla DBA_USERS. Opis kolumny to „Wskazuje, czy dany użytkownik jest wspólny”. Ok….co to znaczy? Co definiuje zwykłego użytkownika? Jeśli wysyłam zapytanie do testowej bazy danych, otrzymuję następujące dane wyjściowe:
SQL> select username,common,oracle_maintained from dba_users;USERNAME COM O-------------------- ---------- --- -papeasland Nie Naudsys Tak ygsmuser Tak ysyskm TAK Czy zatem utrzymywany jest „wspólny” użytkownik, którym jest Oracle? Jeśli tak, czy kolumny COMMON i ORACLE_MAINTAINED nie są zbędne? Wątpię, aby Oracle zawierał dwie kolumny, które oznaczają to samo. Zacząłem więc szukać odpowiedzi… W Przewodniku administratora znajduje się mała sekcja zatytułowana „Zwykli użytkownicy i użytkownicy lokalni”. Wspólny użytkownik to taki, który jest wspólny dla kontenerowej bazy danych oraz wszystkich istniejących i przyszłych podłączanych baz danych w nowej wielodostępnej architekturze bazy danych Oracle 12c. Teraz ma to sens.