IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Création trigger delete : ORA-01031 : privilèges insuffisants


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Création trigger delete : ORA-01031 : privilèges insuffisants
    Bonjour

    J'ai cherché une réponse à ma questions dans l'historique mais sans succès. J'espère que quelqu'un pourra me proposer d'éventuelles solutions.

    J'ai 2 schémas de base de donnée Oracle. Certaines données sont redondantes et donc présentes dans les 2 schémas. Les triggers sont utilisés pour maintenir la cohérence des données.

    Pour chaque action insert/update/delete sur mon schéma1 j'ai donc un trigger qui s'exécute pour mettre à jour mon schéma2.

    En ce qui concerne les insert et update, je n'ai aucun problème. Mes triggers se créent sans erreur et s'exécutent correctement.

    Problème : Le trigger contenant l'instruction delete pose problème. Lorsque j'essaye de le créer j'ai le message suivant :

    LINE/COL ERROR
    -------- -------------------------------------------------
    3/65530 PL/SQL: SQL Statement ignored
    4/9 PL/SQL: ORA-01031: privilèges insuffisants
    Le problème vient de l'instruction 'DELETE FROM ...'. Il semble que je n'ai pas les droits pour l'exécuter. Pourtant, si je ne connecte sur mon schéma1 et que j'exécute :
    DELETE FROM SCHEMA2.MATABLE WHERE MATABLE_ID = 1
    cela fonctionne bien.
    Mon utilisateur "SCHEMA1" a donc bien le droit de faire des suppression (DELETE) sur mon schéma2. Pourtant, une fois la requête encapsulée dans un trigger ... cela ne passe plus.

    Auriez vous une idée au sujet de ce problème.
    J'ai cherché dans les droits liés aux triggers mais je n'ai rien trouvé.

    Si vous voulez des précision, n'hésitez pas.

    Merci pour votre lectures et vos éventuelles suggestions.

    Wu

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut
    est ce que en te connectant sur le schema1 et en executant cette requete , il y'a succes ou echec ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete schema2.matable where 1=0;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par shan08 Voir le message
    est ce que en te connectant sur le schema1 et en executant cette requete , il y'a succes ou echec ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete schema2.matable;
    Hello

    Oui, cela fonctionne.
    J'ai édité mon premier message pour corriger l'erreur : En me connectant sur le schéma1 et en exécutant la requete :
    DELETE FROM SCHEMA2.MATABLE WHERE XXX
    cela fonctionne correctement

    Wu

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut
    ok je vois
    mais est ce ke tu peux nous ecrire le code de ton trigger?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    CREATE OR REPLACE TRIGGER SCHEMA1.MON_TRIGGER AFTER
    DELETE
    ON SCHEMA1.MA_TABLE FOR EACH ROW
    BEGIN
    DELETE
    SCHEMA2.MA_TABLE
    WHERE
    ID = :NEW.ID;
    END;
    /
    Voila le code ... rien de bien compliqué!

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Si votre table est sur SCHEMA1, qu'elle possède un trigger sur SCHEMA2 mais qu'elle est appellée par SCHEMA3 (un compte de service, un compte dédié aux alimentations...), il faut donner les droits à SCHEMA3.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Wutintin31 Voir le message
    Voila le code ... rien de bien compliqué!
    bon je crois pas ke ton trigger puisse marcher .
    le terme :new n'a aucun sens dans un trigger after delete
    utilise plutot :old.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Si votre table est sur SCHEMA1, qu'elle possède un trigger sur SCHEMA2 mais qu'elle est appellée par SCHEMA3 (un compte de service, un compte dédié aux alimentations...), il faut donner les droits à SCHEMA3.
    Je n'ai que deux schémas.
    Sur le schéma1 se trouve la table depuis laquelle le trigger est exécuté.
    Sur le schéma2 se trouve la table sur laquelle le delete du trigger précédent est exécuté.

    Merci d'avance pour votre aide.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par shan08 Voir le message
    bon je crois pas ke ton trigger puisse marcher .
    le terme :new n'a aucun sens dans un trigger after delete
    utilise plutot :old.
    Oui, c'est vrai que c'est une idée.
    Malheureusement, cela ne corrige pas mon erreur. Mon problème semble se trouver sur les droits/privilèges liés à la fonction delete.

    Cependant, je retiens l'idée afin d'améliorer mon trigger une fois que celui ci marchera (je l'espère! )

    Wu

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut
    est ce ke tu peux nous donner le resultat de cette requete?
    sur le schema2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select  PRIVILEGE
    from USER_TAB_PRIVS
    where TABLE_NAME='TATABLE'
    and GRANTEE='SCHEMA1'

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par shan08 Voir le message
    est ce ke tu peux nous donner le resultat de cette requete?
    sur le schema2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select  PRIVILEGE
    from USER_TAB_PRIVS
    where TABLE_NAME='TATABLE'
    and GRANTEE='SCHEMA1'
    Yes!

    Merci pour cette idée.
    Il n'y avait aucun droit sur la table en question. Je ne comprend pas pourquoi cela fonctionnait en dehors des triggers !?!?
    J'ai donc ajouté le privilège "DELETE" pour l'utilisateur sur la table et maintenant mon trigger fonctionne parfaitement!

    Merci pour votre aide.

    Wu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ORA-01031: privilèges insuffisants
    Par Sabact dans le forum SQL
    Réponses: 7
    Dernier message: 02/07/2018, 17h20
  2. Réponses: 9
    Dernier message: 28/10/2010, 16h48
  3. ORACLE 9i : ORA-01031: privilèges insuffisants
    Par isn44 dans le forum Débuter
    Réponses: 2
    Dernier message: 11/03/2010, 13h27
  4. ORA-01031: privilèges insuffisants
    Par jadey dans le forum Oracle
    Réponses: 1
    Dernier message: 19/10/2009, 11h19
  5. ORA-01031 : privilèges insuffisants
    Par bencot dans le forum Administration
    Réponses: 0
    Dernier message: 10/07/2008, 17h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo