Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да покажа всички привилегии на база данни на Oracle за потребител

Извличането на всички потребителски привилегии в рамките на Oracle може да варира от проста задача с помощта на основна SQL заявка до усъвършенстван скрипт, в зависимост основно от това колко участващи роли и привилегии са конфигурирани в сървъра.

В този кратък урок ще обхванем както основния метод на SQL заявка, така и разширения метод на скрипт, така че няма да имате проблеми, независимо от сложността на вашата настройка.

Запитване на изгледи за привилегии на DBA/USER

Администратор на база данни (DBA) за Oracle може просто да изпълни заявка за преглед на редовете в DBA_SYS_PRIVS , DBA_TAB_PRIVS и DBA_ROLE_PRIVS за извличане на информация за потребителските привилегии, свързани с system , tables и roles , съответно.

Например DBA, който желае да види цялата system привилегиите, предоставени на всички потребители, ще издадат следната заявка:

SELECT
  *
FROM
  DBA_SYS_PRIVS;

DBA_SYS_PRIVS изгледът съдържа три колони с данни:

  • GRANTEE е името, ролята или потребителят, на който е присвоено привилегията.
  • PRIVILEGE е привилегията, която е назначена.
  • ADMIN_OPTION показва дали предоставената привилегия включва и ADMIN опция.

За да определите кои потребители имат директни предоставяне на достъп до table ще използваме DBA_TAB_PRIVS изглед:

SELECT
  *
FROM
  DBA_TAB_PRIVS;

Можете да проверите официалната документация за повече информация относно колоните, върнати от тази заявка, но критичните колони са:

  • GRANTEE е името на потребителя с предоставен достъп.
  • TABLE_NAME е името на обекта (таблица, индекс, последователност и т.н.).
  • PRIVILEGE е привилегията, присвоена на GRANTEE за свързания обект.

И накрая, запитване на DBA_ROLE_PRIVS изгледът има голяма част от същата информация, но приложима за roles вместо това, където GRANTED_ROLE колоната посочва въпросната роля:

SELECT
  *
FROM
  DBA_ROLE_PRIVS;

Запитване за привилегиите на текущия потребител

Ако достъпът до DBA не е възможен или е необходим, също така е възможно леко да промените горните заявки, за да видите привилегиите само за текущия потребител .

Това става чрез алтернативно запитване на USER_ версии на горния DBA_ изгледи. По този начин, вместо да гледате DBA_SYS_PRIVS ще потърсим USER_SYS_PRIVS , така:

SELECT
  *
FROM
  USER_SYS_PRIVS;

Тъй като USER_ изгледите с привилегии са на практика същите като техните DBA_ колеги, но специфични само за текущия потребител, типът на върнатите данни и имената на колони са идентични с тези при запитване на DBA_ вместо изгледи.

Разширен скрипт за намиране на всички привилегии

Докато горните методи ще работят за основни системни конфигурации, нещата започват да стават объркани в Oracle, когато съществуват много роли, които от своя страна дават привилегии за роли на други роли и така нататък надолу в заешката дупка. Тъй като DBA_ и USER_ изгледите с привилегии показват само GRANTEES с пряко назначен достъп, често привилегиите, които са наследени чрез други роли, няма да се показват лесно.

За да разрешите този проблем, е препоръчително да използвате усъвършенстван скрипт, като доверената работа на Пийт Финиган и неговия find_all_privs.sql скрипт. Можете също да изберете модифицирана версия от Дейвид Артър, find_all_privs2.sql .

И в двата случая целта на тези скриптове е да ви позволят да рекурсивно намерете всички привилегии, предоставени на конкретен потребител. Когато скриптът намери role за потребителя, той рекурсивно търси други роли и привилегии, предоставени на тази роля, повтаряйки процеса по целия път надолу по веригата. Резултатите от скрипта могат да бъдат изведени на екрана или във файл по желание.

Повече информация за тези скриптове и тяхното използване можете да намерите на 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. Обвързване на параметри на заявка по име с ODP.NET

  2. EF заявка към Oracle хвърля ORA-12704:несъответствие на набора от знаци

  3. ТИП Промяна на дефиниция в Oracle 21c

  4. Как най-добре да разделите csv низове в oracle 9i

  5. 4 PL/SQL примера за анонимни блокове