[ORACLE] Roles und SubRoles von Usern / role_role_privs

XChris

Erfahrenes Mitglied
Hallo,

ich möchte alle Rollen eines Nutzer wissen. Außerdem auch die Rollen, welche er durch die direkt zugewiesen Rollen erhält.

Alle Rollen erhalte ich mit
PHP:
select * from dba_role_privs;

Für die Rollen in Rollen gibt es role_role_privs. Also muss ein rekursives Selfjoin her:

PHP:
select role, granted role from role_role_privs start with role='DBA' connect by prior role=granted_role;

Jedoch hab ich keinen Schimmer, wie ich dieses select auf eine Rolle einschränken kann. Obriges SQL Statement zeigt mir immer alle abhängig Rollen.

Chris
 
Kannst du bitte die Tabellen posten, damit ich mal son einen Überblick habe was du wie benannt, verknüpft hast etc

Gruß =)
 
Klar:

Es ist nur eine Tabelle. Eine Systemtabelle von Oracle: role_role_privs. Hier der Aufbau:

PHP:
ROLE (Role Name)
GRANTED_ROLE (Role which was granted)
ADMIN_OPTION (Grant was with the ADMIN option)

Zur Erklärung:
Ein Nutzer hat z.B. die Rolle "imp_full_database". Dann erhält er auch die Rolle "select_catalog_role". Erhält er diese Rolle, dann gibt es auch "hs_admin_role".

In Der Tabelle sieht das so aus:
PHP:
role                            granted_role
imp_full_database         select_catalog_role
select_catalog_role       hs_admin_role
imp_full_database         excute_catalog_role
etc.
 
Zuletzt bearbeitet:
da solltest du insofern du die Freiheit hast deine DB-Struktur ändern...

eine Tabelle Role und eine granted_role

Code:
RoleTbl:
---------------------------------------------
Role_ID   Role    Granted_role_ID
    1       Rolle1          1
    2       Rolle2          2
    3       Rolle3          3


Granted_RoleTbl:
---------------------------------------------
Granted_Role_ID   Role_ID
         2                  1
         3                  2
         4                  3

es ist SEHR GEWAGT und ich weiß auhc nicht ob das so umsetzbar ist aber in der theorie müsstest du jetzt abfragen können, die zugewiesene rolle und alle Rollen , die eine kleinere ID haben die Priorität legst du halt in der DB fest ^^

sry ich bin kein Profi in sachen SQL aber so würde ich versuchen es zu lösen ;) ^^

Grüße
 
Hab die Lösung.

PHP:
select ...
from role_role_privs
start with role='NameDerRolle'
connect by role = prior granted_role;

@Hening
Sorry, du hast weder mein Posting gelesen noch ausreichend Kenntnisse. role_role_rpivs sind Systemtabellen!
Aber danke fürs den Versuch des Helfens.
 
Das beleidigt mich jetzt aber :(
Das posting hab ich aufjedenfall gelesen sonst wüde ich mich hier ja nciht hinsetzten und mir für dich ne Lösung überlegen ;)

Und von Systemtabellen hab ich (trotz ITA-Abschluss) nie was gehört sry ;)

Grüße
 

Neue Beiträge

Zurück