Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak wyświetlić wszystkie uprawnienia Oracle Database dla użytkownika?

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 do GRANTEE 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy SELECT FOR UPDATE zapobiega wstawianiu innych połączeń, gdy wiersz nie jest obecny?

  2. Odbicie w PLSQL?

  3. Oracle DateTime w klauzuli Where?

  4. Limit czasu dla metody OracleDataReader.Read

  5. Operator obrotu Oracle