Ils sont assez différents, oui.
Dans Oracle, les privilèges sur une table peuvent être accordés soit directement à un utilisateur (auquel cas ils apparaîtraient dans ALL_TAB_PRIVS
) ou des privilèges peuvent être accordés à un rôle (visible dans ROLE_TAB_PRIVS
) et ce rôle peut être accordé à un utilisateur (visible dans USER_ROLE_PRIVS
). La première requête vous montrera les utilisateurs qui ont des autorisations directes sur une table. La deuxième requête vous montrera les utilisateurs auxquels un rôle a été accordé pour accéder à la table (notez que dans les deux cas, vous devez vraiment spécifier un OWNER
en plus du nom de la table). Ni l'un ni l'autre ne vous montrera d'informations sur les octrois qui ont été accordés via plusieurs niveaux de rôles imbriqués (c'est-à-dire que l'utilisateur A a reçu le rôle 1, le rôle 1 a reçu le rôle 2, le rôle 2 a obtenu l'accès à une table). Les octrois effectués via des rôles peuvent également devenir un peu délicats car il existe des rôles par défaut et non par défaut et des rôles protégés par mot de passe et les rôles peuvent être activés et désactivés dans une session.
En général, je suggérerais de jeter un œil aux scripts disponibles sur le site de Pete Finnigan si vous voulez avoir quelque chose qui couvre tous les cas possibles. Dans ce cas, vous voudrez probablement utiliser son script who_can_access pour déterminer quels utilisateurs peuvent accéder à une table particulière.