web-dev-qa-db-fra.com

Obtention de ORA-01031: privilèges insuffisants lors de l'interrogation d'une table au lieu de ORA-00942: la table ou la vue n'existe pas

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?

11
Nitish

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>
7
Jon Heller

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.

1
San

pour ORA-01031: privilèges insuffisants. Certaines des causes les plus courantes sont:

  1. Vous avez tenté de modifier un nom d'utilisateur ou un mot de passe Oracle sans disposer des privilèges appropriés.
  2. Vous avez essayé d'effectuer un UPDATE sur une table, mais vous n'avez que SELECT accès à la table.
  3. Vous avez essayé de démarrer une base de données Oracle à l'aide de CONNECT INTERNAL.
  4. Vous avez essayé d'installer une base de données Oracle sans disposer des privilèges appropriés sur le système d'exploitation.

Les options pour résoudre cette erreur Oracle sont les suivantes:

  1. Vous pouvez demander à Oracle DBA de vous accorder les privilèges appropriés qui vous manquent.
  2. Vous pouvez demander à Oracle DBA d'exécuter l'opération pour vous.
  3. Si vous rencontrez des problèmes pour démarrer Oracle, vous devrez peut-être ajouter l'utilisateur Oracle au groupe dba.

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.

1
Piyush Jain

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

0
Rajesh Goel