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

Impossible de créer Oracle View accédant aux objets d'un autre schéma, malgré les autorisations

Comme indiqué dans la documentation (nous soulignons) :

Si vous ne disposez que du privilège select sur la table sous-jacente accordée via un rôle, vous ne pouvez pas créer de vue sur celle-ci. Même si vous passez au rôle de manière générale, vous devrez conserver l'autorisation explicite en premier pour toutes les vues que vous souhaitez créer.

J'imagine que cela a à voir avec le fonctionnement des rôles. Avec une autorisation directe, Oracle sait si vous pouvez voir la table dans l'autre schéma. Si vous accordez select sur votre vue à quelqu'un d'autre, alors lorsqu'il interroge la vue, Oracle sait que la chaîne de privilèges est là. Si votre octroi direct sur la table est révoqué, il existe des mécanismes pour invalider les objets dépendants. Mais que devrait-il se passer ? Le privilège select du rôle sur la table est révoqué; ou votre accès au rôle est révoqué ; ou juste au sein de votre propre session, que devrait-il se passer si vous désactivez ce rôle - pouvez-vous toujours accéder à la vue ? C'est un peu plus compliqué qu'il n'y paraît à première vue.

Heureusement, la création de vues devrait être relativement rare et contrôlable. La plupart des personnes accédant à la table via le rôle n'auront pas besoin de créer une vue dessus (je suppose !).

Une autre option ici est de créer la vue dans le ARIEL schéma, puis accordez des privilèges à APEX_ARIEL et/ou un rôle. Que cela soit approprié dépend de votre requête de vue réelle et de votre motivation pour créer la vue.