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.