Lorsque j'interroge une table dans le schéma C à partir du schéma A, j'obtiens ORA-01031: privilèges insuffisants et lorsque j'interroge la même table à partir du schéma B, j'obtiens - ORA-00942: la table ou la vue n'existe pas. Sur la table, aucun des schémas n'a de privilèges. Pourquoi est-ce que je reçois des messages d'erreur différents dans ce cas?
Vous pouvez obtenir ORA-01031: insufficient privileges
au lieu de ORA-00942: table or view does not exist
lorsque vous avez au moins un privilège sur la table, mais pas le privilège nécessaire.
Créer des schémas
SQL> create user schemaA identified by schemaA;
User created.
SQL> create user schemaB identified by schemaB;
User created.
SQL> create user test_user identified by test_user;
User created.
SQL> grant connect to test_user;
Grant succeeded.
Créer des objets et privilèges
Il est inhabituel, mais possible, d'accorder à un schéma un privilège comme DELETE sans accorder SELECT.
SQL> create table schemaA.table1(a number);
Table created.
SQL> create table schemaB.table2(a number);
Table created.
SQL> grant delete on schemaB.table2 to test_user;
Grant succeeded.
Connectez-vous en tant que TEST_USER et essayez d'interroger les tables
Cela montre que le fait d'avoir certains privilèges sur la table modifie le message d'erreur.
SQL> select * from schemaA.table1;
select * from schemaA.table1
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from schemaB.table2;
select * from schemaB.table2
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL>
ORA-01031: insufficient privileges
se produit lorsque l'objet existe dans le schéma mais n'a aucun accès à cet objet.
ORA-00942: table or view does not exist
se produit lorsque l'objet n'existe pas dans le schéma actuel. Si l'objet existe dans un autre schéma, vous devez y accéder à l'aide de .. Vous pouvez toujours obtenir une erreur de privilèges insuffisants si le propriétaire n'a pas donné accès au schéma appelant.
pour ORA-01031: privilèges insuffisants. Certaines des causes les plus courantes sont:
UPDATE
sur une table, mais vous n'avez que SELECT
accès à la table.CONNECT INTERNAL
.Les options pour résoudre cette erreur Oracle sont les suivantes:
Pour ORA-00942: table or view does not exist.
Vous avez tenté d'exécuter une instruction SQL qui fait référence à une table ou à une vue qui n'existe pas, à laquelle vous n'avez pas accès ou qui appartient à un autre schéma et vous n'avez pas référencé la table par le nom du schéma.
Si cette erreur s'est produite car la table ou la vue n'existe pas, vous devrez créer la table ou la vue.
Vous pouvez vérifier si la table existe dans Oracle en exécutant l'instruction SQL suivante:
select *
from all_objects
where object_type in ('TABLE','VIEW')
and object_name = 'OBJECT_NAME';
Par exemple, si vous recherchez une table fournisseurs, vous exécuterez:
select *
from all_objects
where object_type in ('TABLE','VIEW')
and object_name = 'SUPPLIERS';
OPTION 2
Si cette erreur s'est produite parce que vous n'avez pas accès à la table ou à la vue, vous devrez avoir le propriétaire de la table/vue, ou un DBA vous accordera les privilèges appropriés à cet objet.
OPTION # 3
Si cette erreur s'est produite car la table/vue appartient à un autre schéma et que vous n'avez pas référencé la table par le nom du schéma, vous devrez réécrire votre SQL pour inclure le nom du schéma.
Par exemple, vous avez peut-être exécuté l'instruction SQL suivante:
select *
from suppliers;
Mais la table suppliers
ne vous appartient pas, mais plutôt, elle appartient à un schéma appelé app, vous pouvez corriger votre SQL comme suit:
select *
from app.suppliers;
Si vous ne savez pas à quel schéma appartient la table/vue des fournisseurs, vous pouvez exécuter le SQL suivant pour le savoir:
select owner
from all_objects
where object_type in ('TABLE','VIEW')
and object_name = 'SUPPLIERS';
Cela renverra le nom du schéma qui possède la table des fournisseurs.
Dans SQL Developer: Tout fonctionnait bien et j'avais toutes les autorisations pour me connecter et il n'y avait aucun changement de mot de passe et je pouvais cliquer sur la table et voir l'onglet des données.
Mais lorsque j'exécute une requête (simple instruction de sélection), le message "ORA-01031: privilèges insuffisants" s'affiche.
La solution consiste simplement à déconnecter la connexion et à se reconnecter. Remarque: seule la reconnexion n'a pas fonctionné pour moi. Instantané de déconnexion du développeur SQL