Comment afficher tous les privilèges d’un utilisateur dans oracle?

Quelqu’un peut-il s’il vous plaît me dire comment afficher tous les privilèges / règles d’un utilisateur spécifique dans la console sql?

Vous pouvez essayer ces vues ci-dessous.

SELECT * FROM USER_SYS_PRIVS; SELECT * FROM USER_TAB_PRIVS; SELECT * FROM USER_ROLE_PRIVS; 

Les administrateurs de firebase database et autres utilisateurs DBA_ peuvent trouver les privilèges accordés aux autres utilisateurs avec les versions DBA_ de ces mêmes vues. Ils sont couverts dans la documentation .

Ces vues montrent uniquement les privilèges accordés directement à l’utilisateur. La recherche de tous les privilèges, y compris ceux accordés indirectement via des rôles, nécessite des instructions SQL récursives plus compliquées:

 select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3; select * from dba_sys_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3; select * from dba_tab_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4; 

Il existe différents scripts qui vont faire cela en fonction de la folie que vous voulez obtenir. J’utiliserais personnellement le script find_all_privs de Pete Finnigan.

Si vous voulez l’écrire vous-même, la requête devient plutôt difficile. Les utilisateurs peuvent bénéficier de privilèges système visibles dans DBA_SYS_PRIVS . On peut leur accorder des privilèges d’object visibles dans DBA_TAB_PRIVS . Et ils peuvent se voir atsortingbuer des rôles visibles dans DBA_ROLE_PRIVS (les rôles peuvent être par défaut ou non par défaut et peuvent également nécessiter un mot de passe, de sorte qu’un utilisateur ne peut pas nécessairement utiliser ces privilèges). il a acquis par le biais du rôle par défaut). Mais ces rôles peuvent, à leur tour, se voir accorder des privilèges système, des privilèges d’object et des rôles supplémentaires qui peuvent être visualisés en consultant ROLE_SYS_PRIVS , ROLE_TAB_PRIVS et ROLE_ROLE_PRIVS . Le script de Pete parcourt ces relations pour montrer tous les privilèges qui aboutissent à un utilisateur.

Une autre ressource utile:

http://psoug.org/reference/roles.html

  • DBA_SYS_PRIVS
  • DBA_TAB_PRIVS
  • DBA_ROLE_PRIVS

Vous pouvez utiliser le code ci-dessous pour obtenir toutes les listes de privilèges de tous les utilisateurs.

 select * from dba_sys_privs 

Bien que la réponse de Raviteja Vutukuri fonctionne et soit rapide à assembler, elle n’est pas particulièrement flexible pour faire varier les filtres et n’aide pas beaucoup si vous souhaitez faire quelque chose par programmation. Donc, j’ai mis en place ma propre requête:

 SELECT PRIVILEGE, OBJ_OWNER, OBJ_NAME, USERNAME, LISTAGG(GRANT_TARGET, ',') WITHIN GROUP (ORDER BY GRANT_TARGET) AS GRANT_SOURCES, -- Lists the sources of the permission MAX(ADMIN_OR_GRANT_OPT) AS ADMIN_OR_GRANT_OPT, -- MAX acts as a Boolean OR by picking 'YES' over 'NO' MAX(HIERARCHY_OPT) AS HIERARCHY_OPT -- MAX acts as a Boolean OR by picking 'YES' over 'NO' FROM ( -- Gets all roles a user has, even inherited ones WITH ALL_ROLES_FOR_USER AS ( SELECT DISTINCT CONNECT_BY_ROOT GRANTEE AS GRANTED_USER, GRANTED_ROLE FROM DBA_ROLE_PRIVS CONNECT BY GRANTEE = PRIOR GRANTED_ROLE ) SELECT PRIVILEGE, OBJ_OWNER, OBJ_NAME, USERNAME, REPLACE(GRANT_TARGET, USERNAME, 'Direct to user') AS GRANT_TARGET, ADMIN_OR_GRANT_OPT, HIERARCHY_OPT FROM ( -- System privileges granted directly to users SELECT PRIVILEGE, NULL AS OBJ_OWNER, NULL AS OBJ_NAME, GRANTEE AS USERNAME, GRANTEE AS GRANT_TARGET, ADMIN_OPTION AS ADMIN_OR_GRANT_OPT, NULL AS HIERARCHY_OPT FROM DBA_SYS_PRIVS WHERE GRANTEE IN (SELECT USERNAME FROM DBA_USERS) UNION ALL -- System privileges granted users through roles SELECT PRIVILEGE, NULL AS OBJ_OWNER, NULL AS OBJ_NAME, ALL_ROLES_FOR_USER.GRANTED_USER AS USERNAME, GRANTEE AS GRANT_TARGET, ADMIN_OPTION AS ADMIN_OR_GRANT_OPT, NULL AS HIERARCHY_OPT FROM DBA_SYS_PRIVS JOIN ALL_ROLES_FOR_USER ON ALL_ROLES_FOR_USER.GRANTED_ROLE = DBA_SYS_PRIVS.GRANTEE UNION ALL -- Object privileges granted directly to users SELECT PRIVILEGE, OWNER AS OBJ_OWNER, TABLE_NAME AS OBJ_NAME, GRANTEE AS USERNAME, GRANTEE AS GRANT_TARGET, GRANTABLE, HIERARCHY FROM DBA_TAB_PRIVS WHERE GRANTEE IN (SELECT USERNAME FROM DBA_USERS) UNION ALL -- Object privileges granted users through roles SELECT PRIVILEGE, OWNER AS OBJ_OWNER, TABLE_NAME AS OBJ_NAME, GRANTEE AS USERNAME, ALL_ROLES_FOR_USER.GRANTED_ROLE AS GRANT_TARGET, GRANTABLE, HIERARCHY FROM DBA_TAB_PRIVS JOIN ALL_ROLES_FOR_USER ON ALL_ROLES_FOR_USER.GRANTED_ROLE = DBA_TAB_PRIVS.GRANTEE ) ALL_USER_PRIVS -- Adjust your filter here WHERE USERNAME = 'USER_NAME' ) DISTINCT_USER_PRIVS GROUP BY PRIVILEGE, OBJ_OWNER, OBJ_NAME, USERNAME ; 

Avantages:

  • Je peux facilement filtrer par beaucoup d’informations différentes, comme l’object, le privilège, que ce soit par un rôle particulier, etc. simplement en changeant cette clause WHERE .
  • C’est une requête unique, ce qui signifie que je n’ai pas à composer mentalement les résultats.
  • Cela résout la question de savoir s’ils peuvent accorder le privilège ou non et si elle inclut les privilèges pour les sous-objects (la partie “hiérarchique”) entre les différentes sources de privilège.
  • Il est facile de voir tout ce que je dois faire pour révoquer le privilège, car il répertorie toutes les sources du privilège.
  • Il combine des privilèges de table et de système en une seule vue cohérente, ce qui nous permet de répertorier tous les privilèges d’un utilisateur d’un seul coup.
  • C’est une requête , pas une fonction qui éjecte tout cela à DBMS_OUTPUT ou quelque chose comme ça (comparé au script lié de Pete Finnigan). Cela le rend utile pour une utilisation par programme et pour l’exportation.
  • Le filtre n’est pas répété; il apparaît seulement une fois. Cela facilite le changement.
  • La sous-requête peut facilement être extraite si vous devez l’examiner individuellement.