Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment afficher tous les privilèges de base de données Oracle pour un utilisateur

La récupération de tous les privilèges utilisateur au sein d'Oracle peut aller d'une simple tâche utilisant une requête SQL de base à un script avancé, en fonction principalement de l'implication des rôles et des privilèges dans la configuration du serveur.

Dans ce bref didacticiel, nous couvrirons à la fois la méthode de requête SQL de base ainsi que la méthode de script avancée afin que vous n'ayez aucun problème quelle que soit la complexité de votre configuration.

Interroger les vues de privilège DBA/USER

Un administrateur de base de données (DBA) pour Oracle peut simplement exécuter une requête pour afficher les lignes dans DBA_SYS_PRIVS , DBA_TAB_PRIVS , et DBA_ROLE_PRIVS pour récupérer des informations sur les privilèges des utilisateurs liés au system , tables , et roles , respectivement.

Par exemple, un DBA souhaitant visualiser tous les éléments system les privilèges accordés à tous les utilisateurs émettraient la requête suivante :

SELECT
  *
FROM
  DBA_SYS_PRIVS;

Le DBA_SYS_PRIVS la vue contient trois colonnes de données :

  • GRANTEE est le nom, le rôle ou l'utilisateur auquel le privilège a été attribué.
  • PRIVILEGE est le privilège qui est attribué.
  • ADMIN_OPTION indique si le privilège accordé inclut également le ADMIN option.

Pour déterminer quels utilisateurs ont direct accorder l'accès à une table nous utiliserons le DBA_TAB_PRIVS afficher :

SELECT
  *
FROM
  DBA_TAB_PRIVS;

Vous pouvez consulter la documentation officielle pour plus d'informations sur les colonnes renvoyées par cette requête, mais les colonnes critiques sont :

  • GRANTEE est le nom de l'utilisateur auquel l'accès est accordé.
  • TABLE_NAME est le nom de l'objet (table, index, séquence, etc).
  • PRIVILEGE est le privilège attribué au GRANTEE pour l'objet associé.

Enfin, interroger le DBA_ROLE_PRIVS la vue a une grande partie des mêmes informations mais s'applique aux roles à la place, où le GRANTED_ROLE colonne précise le rôle en question :

SELECT
  *
FROM
  DBA_ROLE_PRIVS;

Interroger les privilèges de l'utilisateur actuel

Si l'accès DBA n'est pas possible ou nécessaire, il est également possible de modifier légèrement les requêtes ci-dessus pour afficher les privilèges uniquement pour l'utilisateur actuel .

Cela se fait en interrogeant alternativement USER_ versions du DBA_ ci-dessus vues. Ainsi, au lieu de regarder DBA_SYS_PRIVS nous interrogerions USER_SYS_PRIVS , comme ceci :

SELECT
  *
FROM
  USER_SYS_PRIVS;

Depuis le USER_ les vues de privilège sont effectivement les mêmes que leur DBA_ homologues, mais spécifiques à l'utilisateur actuel uniquement, le type de données renvoyées et les noms de colonne sont tous identiques à ceux lors de l'interrogation de DBA_ vues à la place.

Script avancé pour rechercher tous les privilèges

Bien que les méthodes ci-dessus fonctionnent pour les configurations système de base, les choses commencent à devenir désordonnées dans Oracle lorsque de nombreux rôles existent qui accordent à leur tour des privilèges de rôle à d'autres rôles, et ainsi de suite dans le terrier du lapin. Depuis le DBA_ et USER_ les vues privilégiées n'affichent que les GRANTEES avec directement affecté l'accès, souvent les privilèges hérités d'autres rôles ne seront pas facilement affichés.

Pour résoudre cela, il est conseillé d'utiliser un script avancé tel que le travail de confiance de Pete Finnigan et son find_all_privs.sql scénario. Vous pouvez également opter pour une version modifiée par David Arthur, find_all_privs2.sql .

Dans les deux cas, le but de ces scripts est de vous permettre de récursivement localiser tous les privilèges accordés à un utilisateur particulier. Lorsque le script localise un role pour l'utilisateur, il recherche de manière récursive d'autres rôles et privilèges accordés à ce rôle, répétant le processus tout au long de la chaîne. Les résultats du script peuvent être affichés à l'écran ou dans un fichier, au choix.

Vous trouverez plus d'informations sur ces scripts et leur utilisation sur petefinnigan.com.