sql >> Databáze >  >> RDS >> Oracle

Jak zobrazit všechna oprávnění k databázi Oracle pro uživatele

Načtení všech uživatelských oprávnění v rámci Oracle se může pohybovat od jednoduché úlohy pomocí základního SQL dotazu až po pokročilý skript, v závislosti především na tom, jak jsou role a oprávnění nakonfigurovány na serveru.

V tomto krátkém tutoriálu pokryjeme základní metodu dotazů SQL i pokročilou metodu skriptů, takže bez ohledu na složitost nastavení nebudete mít žádný problém.

Dotaz na zobrazení DBA/uživatelské oprávnění

Správce databáze (DBA) pro Oracle může jednoduše spustit dotaz k zobrazení řádků v DBA_SYS_PRIVS , DBA_TAB_PRIVS a DBA_ROLE_PRIVS k načtení informací o uživatelských oprávněních souvisejících se system , tables a roles , respektive.

Například administrátor, který si přeje zobrazit celý system oprávnění udělená všem uživatelům by vyvolala následující dotaz:

SELECT
  *
FROM
  DBA_SYS_PRIVS;

DBA_SYS_PRIVS zobrazení obsahuje tři sloupce dat:

  • GRANTEE je jméno, role nebo uživatel, kterému bylo přiděleno oprávnění.
  • PRIVILEGE je oprávnění, které je přiřazeno.
  • ADMIN_OPTION označuje, zda udělené oprávnění zahrnuje také ADMIN možnost.

Chcete-li zjistit, kteří uživatelé mají přímé udělit přístup k table použijeme DBA_TAB_PRIVS zobrazit:

SELECT
  *
FROM
  DBA_TAB_PRIVS;

Další informace o sloupcích vrácených z tohoto dotazu najdete v oficiální dokumentaci, ale kritické sloupce jsou:

  • GRANTEE je jméno uživatele s uděleným přístupem.
  • TABLE_NAME je název objektu (tabulky, indexu, sekvence atd.).
  • PRIVILEGE je oprávnění přidělené GRANTEE pro přidružený objekt.

Nakonec dotaz na DBA_ROLE_PRIVS zobrazení má mnoho stejných informací, ale vztahuje se na roles místo toho, kde GRANTED_ROLE sloupec určuje příslušnou roli:

SELECT
  *
FROM
  DBA_ROLE_PRIVS;

Dotaz na oprávnění aktuálního uživatele

Pokud přístup DBA není možný nebo nezbytný, je také možné mírně upravit výše uvedené dotazy, aby se zobrazila oprávnění pouze pro aktuálního uživatele .

To se provádí alternativním dotazem USER_ verze výše uvedeného DBA_ pohledy. Tedy místo toho, abyste se dívali na DBA_SYS_PRIVS zeptali bychom se USER_SYS_PRIVS , asi takhle:

SELECT
  *
FROM
  USER_SYS_PRIVS;

Od USER_ zobrazení oprávnění jsou v podstatě stejná jako jejich DBA_ protějšky, ale specifické pouze pro aktuálního uživatele, typ vrácených dat a názvy sloupců jsou stejné jako při dotazu DBA_ zhlédnutí.

Pokročilý skript pro nalezení všech oprávnění

Zatímco výše uvedené metody budou fungovat pro základní konfigurace systému, v Oracle začnou být věci zmatené, když existuje mnoho rolí, které zase udělují oprávnění rolí jiným rolím, a tak dále v králičí noře. Od DBA_ a USER_ zobrazení oprávnění zobrazují pouze GRANTEES s přímo přiřazeným přístup, často oprávnění, která jsou zděděna jinými rolemi, nebudou snadno zobrazena.

K vyřešení tohoto problému je vhodné použít pokročilý skript, jako je důvěryhodná práce Peta Finnigana a jeho find_all_privs.sql skript. Můžete se také rozhodnout pro upravenou verzi od Davida Arthura, find_all_privs2.sql .

V obou případech je účelem těchto skriptů umožnit vám rekurzivně vyhledejte všechna oprávnění udělená konkrétnímu uživateli. Když skript najde role pro uživatele rekurzivně vyhledává další role a oprávnění udělená této roli a celý proces opakuje v celém řetězci. Výsledky skriptu mohou být podle potřeby zobrazeny na obrazovce nebo do souboru.

Více informací o těchto skriptech a jejich použití lze nalézt na petefinnigan.com.


  1. Výuka SQL (DDL, DML) na příkladu dialektu MS SQL Server

  2. Výměna hodnot sloupců v MySQL

  3. Vkládejte objekty BLOB do databází MySql pomocí php

  4. psycopg2 ekvivalent mysqldb.escape_string?