web-dev-qa-db-fra.com

Ora-00942: table ou vue n'existe pas tout en créant Synonyme

Nous utilisons Oracle 11G, la structure de la DB va comme ceci:

Nous avons des utilisateurs CST et FAS.
[.____] CST contient une table ST_CAT2, un synonyme public ST_CAT a été créé pour la table CST.ST_CAT2 comme un utilisateur SYS.
[.____] ST_ROLE est un rôle qui a donné SELECT UPDATE DELETE ALTER privilèges sur ST_CAT2. ST_ROLE est accordé à FAS.

Maintenant, tout en créant une vue comme FAS,

CREATE OR REPLACE VIEW "FAS"."EXTERNAL_SR" ("PROD_ID", "PRODUCT") AS 
SELECT
prod_id,
    product
FROM
st_cat;

nous éprouvons l'erreur

ORA-00942: table or view does not exist

quelle pourrait-être la cause?

2
Vishwanath gowda k

Dans la Référence sur la langue SQL Vous trouverez sous prérequesites (souligné par moi):

Le propriétaire du schéma contenant la vue doit avoir les privilèges nécessaires à sélectionner (lecture ou sélection de privilège), insérer, mettre à jour ou supprimer des lignes de toutes les tables ou vues sur lesquelles la vue est basée. Le propriétaire doit être accordé à ces privilèges directement plutôt que par un rôle.

Vous devez donc accorder aux privilèges directement à l'utilisateur qui crée la vue.

Il en va de même pour les procédures PL/SQL et est déjà discutée dans ce post .

Il existe deux façons d'accorder directement un privilège sélectionné:

  1. accordez-le par un objet privilège: grant select on A_TABLE to A_USER;
  2. accordez-le par un privilège système: grant select any table to A_USER;

Ce dernier n'est pas recommandé, accordé à ces privilèges système aux utilisateurs non DBA est considéré comme un risque de sécurité .

De tels privilèges existent pour beaucoup de procédures et d'actions, par ex. Insérez n'importe quelle table, exécutez une procédure, ...

2
miracle173