Quelqu'un peut-il me dire comment afficher tous les privilèges / règles d'un utilisateur spécifique dans la console sql?
la source
Quelqu'un peut-il 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 base de données et les autres utilisateurs expérimentés peuvent trouver les privilèges accordés à d'autres utilisateurs avec les DBA_
versions de ces mêmes vues. Ils sont traités dans la documentation .
Ces vues affichent uniquement les privilèges accordés directement à l'utilisateur. La recherche de tous les privilèges, y compris ceux accordés indirectement via les 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 divers scripts flottant qui le feront en fonction de la façon dont vous voulez devenir fou. J'utiliserais personnellement le script find_all_privs de Pete Finnigan .
Si vous voulez l'écrire vous-même, la requête devient assez difficile. Les utilisateurs peuvent se voir accorder des privilèges système qui sont visibles dans DBA_SYS_PRIVS
. Ils peuvent recevoir des privilèges d'objet visibles dans DBA_TAB_PRIVS
. Et ils peuvent se voir attribuer des rôles qui sont visibles dans DBA_ROLE_PRIVS
(les rôles peuvent être par défaut ou non par défaut et peuvent également exiger un mot de passe, donc ce n'est pas parce qu'un utilisateur a obtenu un rôle que l'utilisateur peut nécessairement utiliser les privilèges qu'il acquis via le rôle par défaut). Mais ces rôles peuvent, à leur tour, être des privilèges système accordés, des privilèges d'objet et d' autres rôles qui peuvent être visionnés en regardant ROLE_SYS_PRIVS
, ROLE_TAB_PRIVS
et ROLE_ROLE_PRIVS
. Le script de Pete parcourt ces relations pour montrer tous les privilèges qui finissent par être attribués à un utilisateur.
SYS
privilèges et qui veulent juste regarder les privilèges de notre propre compte, le script n'a absolument aucune valeur. Je n'ai pas accèsUTL_FILE
ni à ni auxDBA_SYS_PRIVS
autresDBA
etSYS
zones que le script examine.ROLE_SYS_PRIVS
,ROLE_TAB_PRIVS
etROLE_ROLE_PRIVS
doit être examinée. Les documents indiquent qu'ils sont destinés à l' utilisateur actuel .Une autre ressource utile:
http://psoug.org/reference/roles.html
la source
DBA
ouSYS
, et que vous voulez juste trouver les privilèges de votre propre compte.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 trop si vous cherchez à faire quelque chose par programme. J'ai donc rédigé ma propre requête:
Avantages:
WHERE
clause.DBMS_OUTPUT
ou quelque chose (par rapport au script lié de Pete Finnigan). Cela le rend utile pour une utilisation programmatique et pour l'exportation.GRANT
.la source
USER_SYS_PRIVS
(privilèges système accordés directement),USER_TAB_PRIVS
(privilèges d'objet accordés directement)USER_ROLE_PRIVS
(rôles attribués directement à l'utilisateur),ROLE_ROLE_PRIVS
(pour obtenir les rôles hérités),ROLE_SYS_PRIVS
(privilèges système via les rôles) etROLE_TAB_PRIVS
(privilèges d'objet via les rôles). Pouah. Oracle est tellement compliqué.Vous pouvez utiliser le code ci-dessous pour obtenir la liste de tous les privilèges de tous les utilisateurs.
la source
Pour afficher tous les privilèges:
la source