Pobieranie wszystkich uprawnień użytkownika w Oracle może wahać się od prostego zadania wykorzystującego podstawowe zapytanie SQL do zaawansowanego skryptu, w zależności od tego, jak zaangażowane są role i uprawnienia skonfigurowane na serwerze.
W tym krótkim samouczku omówimy zarówno podstawową metodę zapytań SQL, jak i zaawansowaną metodę skryptów, dzięki czemu nie będziesz mieć problemu niezależnie od złożoności konfiguracji.
Odpytywanie o widoki uprawnień DBA/USER
Administrator bazy danych (DBA) dla Oracle może po prostu wykonać zapytanie, aby wyświetlić wiersze w DBA_SYS_PRIVS , DBA_TAB_PRIVS i DBA_ROLE_PRIVS do pobierania informacji o uprawnieniach użytkownika związanych z system , tables i roles , odpowiednio.
Na przykład administrator, który chce wyświetlić cały system uprawnienia przyznane wszystkim użytkownikom spowoduje wysłanie następującego zapytania:
SELECT
*
FROM
DBA_SYS_PRIVS;
DBA_SYS_PRIVS widok zawiera trzy kolumny danych:
GRANTEEto nazwa, rola lub użytkownik, któremu przypisano uprawnienia.PRIVILEGEjest przyznanym przywilejem.ADMIN_OPTIONwskazuje, czy przyznane uprawnienie obejmuje równieżADMINopcja.
Aby określić, którzy użytkownicy mają bezpośrednie przyznaj dostęp do table użyjemy DBA_TAB_PRIVS widok:
SELECT
*
FROM
DBA_TAB_PRIVS;
Możesz sprawdzić oficjalną dokumentację, aby uzyskać więcej informacji o kolumnach zwróconych z tego zapytania, ale krytyczne kolumny to:
GRANTEEto nazwa użytkownika z przyznanym dostępem.TABLE_NAMEto nazwa obiektu (tabela, indeks, sekwencja itp.).PRIVILEGEto uprawnienie przypisane doGRANTEEdla powiązanego obiektu.
Na koniec zapytanie DBA_ROLE_PRIVS widok ma wiele takich samych informacji, ale ma zastosowanie do roles zamiast tego, gdzie GRANTED_ROLE kolumna określa daną rolę:
SELECT
*
FROM
DBA_ROLE_PRIVS;
Odpytywanie o uprawnienia bieżącego użytkownika
Jeśli dostęp DBA nie jest możliwy lub konieczny, można również nieznacznie zmodyfikować powyższe zapytania, aby wyświetlić uprawnienia wyłącznie dla bieżącego użytkownika .
Odbywa się to poprzez alternatywne zapytanie USER_ wersje powyższego DBA_ wyświetlenia. Dlatego zamiast patrzeć na DBA_SYS_PRIVS zapytalibyśmy USER_SYS_PRIVS , jak tak:
SELECT
*
FROM
USER_SYS_PRIVS;
Od USER_ widoki uprawnień są w rzeczywistości takie same jak ich DBA_ odpowiedniki, ale specyficzne tylko dla bieżącego użytkownika, typ zwracanych danych i nazwy kolumn są identyczne jak w przypadku zapytania DBA_ widoki między innymi.
Zaawansowany skrypt do wyszukiwania wszystkich uprawnień
Chociaż powyższe metody będą działać w przypadku podstawowych konfiguracji systemu, w Oracle sytuacja zaczyna się robić bałagan, gdy istnieje wiele ról, które z kolei nadają uprawnienia innym rolom i tak dalej w króliczej dziurze. Od DBA_ i USER_ widoki uprawnień wyświetlają tylko GRANTEES z przypisanym bezpośrednio dostępu, często przywileje dziedziczone przez inne role nie będą łatwo widoczne.
Aby rozwiązać ten problem, zaleca się użycie zaawansowanego skryptu, takiego jak zaufana praca Pete'a Finnigana i jego find_all_privs.sql scenariusz. Możesz także wybrać zmodyfikowaną wersję autorstwa Davida Arthura, find_all_privs2.sql .
W obu przypadkach celem tych skryptów jest umożliwienie rekurencyjnego zlokalizować wszystkie uprawnienia przyznane danemu użytkownikowi. Kiedy skrypt zlokalizuje roles dla użytkownika rekursywnie wyszukuje inne role i uprawnienia przyznane tej roli, powtarzając cały proces w dół łańcucha. Wyniki skryptu mogą być wyświetlane na ekranie lub w pliku zgodnie z potrzebami.
Więcej informacji na temat tych skryptów i ich wykorzystania można znaleźć na stronie petefinnigan.com.