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:
GRANTEE
to nazwa, rola lub użytkownik, któremu przypisano uprawnienia.PRIVILEGE
jest przyznanym przywilejem.ADMIN_OPTION
wskazuje, czy przyznane uprawnienie obejmuje równieżADMIN
opcja.
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:
GRANTEE
to nazwa użytkownika z przyznanym dostępem.TABLE_NAME
to nazwa obiektu (tabela, indeks, sekwencja itp.).PRIVILEGE
to uprawnienie przypisane doGRANTEE
dla 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.