web-dev-qa-db-fra.com

Quelle est la meilleure façon de vérifier les privilèges actuels des utilisateurs sur une table particulière d'un autre schéma?

Dans mon logiciel, au moment de l'exécution, je dois vérifier si l'utilisateur connecté a les privilèges sur certaines tables, sur 2 schémas différents. D'après ce que j'ai trouvé faire des recherches, je suis tombé sur ces 2 vues all_tab_privs_recd all_tab_privs Dois-je utiliser l'une de ces vues, ou existe-t-il une autre meilleure façon de le faire? Merci

3
Goldorak84

Je suis enfin venu avec cette requête que j'utilise uniquement si l'utilisateur connecté est différent du schéma que je souhaite vérifier les privilèges sur:

SELECT PRIVILEGE
FROM ALL_TAB_PRIVS_RECD
WHERE PRIVILEGE = 'SELECT'
AND TABLE_NAME = 'GN_VERSION'
AND OWNER = 'USER_A'
UNION ALL
SELECT PRIVILEGE
FROM SESSION_PRIVS
WHERE PRIVILEGE = 'SELECT ANY TABLE';

Ceci vérifie le privilège Select sur la table Gn_version sur le schéma User_a

4
Goldorak84

ALL_TAB_PRIVS est un superset de ALL_TAB_PRIVS_RECD . Vous voulez probablement ALL_TAB_PRIVS Comme il inclut des tables que l'utilisateur actuel possède.