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

PostgreSQL Discussion :

PDOStatement::execute(): SQLSTATE[42501]: Insufficient privilege


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut PDOStatement::execute(): SQLSTATE[42501]: Insufficient privilege
    Bonjour, j'ai créé une table 'fonction' en tant que super utilisateur postgres....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE TABLE hl.fonction (id integer PRIMARY KEY NOT NULL DEFAULT  nextval('hl.fonction_id_seq'::regclass), nom VARCHAR (100),parent_id INTEGER DEFAULT NULL CONSTRAINT fonction_fkey1 REFERENCES hl.fonction, ordre INTEGER DEFAULT 0,produit VARCHAR(100) CONSTRAINT fonction_fkey2 REFERENCES hl.produit ON UPDATE CASCADE, CONSTRAINT fonction1_check CHECK (id > parent_id));
    J'ai attribué tous les droits à l'utilisateur postgres qui est le propriétaire de toutes mes tables.
    Quand je fais un insert dans cette table j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PDOStatement::execute(): SQLSTATE[42501]: Insufficient privilege 7 ERREUR: droit refus\xc3\xa9 pour la relation fonction\nCONTEXT:  instruction SQL \xc2\xab I    NSERT INTO hl.fonction(nom, ordre, produit) VALUES( $1 ,  $2 ,  $3 ) RETURNING id \xc2\xbb\nPL/pgSQL function "fonction_add"


    voila ma fonction add qui marche super bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    CREATE OR REPLACE FUNCTION hl.fonction_add(parent_id_   INTEGER,
                                               nom_         VARCHAR,
                                               ordre_       INTEGER,
                                               produit_     VARCHAR)
    RETURNS INTEGER AS $$
    DECLARE
      id_fonction_    hl.fonction.id%TYPE;
    BEGIN
      IF parent_id_ <= 0 THEN
        INSERT INTO hl.fonction(nom, ordre, produit)
        VALUES(nom_, ordre_, produit_)
        RETURNING id INTO id_fonction_;
        RETURN id_fonction_;
      ELSE
        INSERT INTO hl.fonction(parent_id, nom, ordre, produit)
        VALUES(parent_id_, nom_, ordre_, produit_)
        RETURNING id INTO id_fonction_;
        RETURN id_fonction_;
      END IF;
    END;
    $$ LANGUAGE 'plpgsql';
    L'un de vous a-t-il une idée?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Apparemment la fonction est appelée par un utilisateur qui n'est pas postgres et à qui on n'a pas donné le droit d'écrire dans cette table.

  3. #3
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Pourtant je n'ai que 3 utilisateurs dans la base..et au 3 utilisateurs j'ai donné tous les droits sur cette table... mais rien n'y fait...

  4. #4
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Personne?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Les droits sur la table ok, mais les droits sur les fonctions ?

  6. #6
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Merci pour votre réponse rapide...
    Pour avoir les droits sur la fonction...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bdneo=# \z hl.fonction_add;
     
                               Droits d'accès
     Schéma | Nom | Type | Droits d'accès | Droits d'accès Ã* la colonne
    --------+-----+------+----------------+-----------------------------
    (0 ligne)
    Comment faire pour ajouter les droit sur cette fonction? J'ai essayer avec un grant all... mais impossible parceque la fonction n'est pas considérée comme une relation (table).

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Pour ça y a la doc (google : postgresql grant):
    http://www.postgresql.org/docs/9.1/s...sql-grant.html

  8. #8
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Voila le message d'erreur que j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GRANT EXECUTE ON FUNCTION hl.fonction_add(parent_id_  INTEGER, nom_ VARCHAR, ordre_ INTEGER, produit_  VARCHAR) To postgres;
     
    ERREUR:  la relation « hl.fonction_add » n'existe pas
    J'ai lancer la commande pour mes 3 differents utilisateur et j'ai le meme mesage...

  9. #9
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Petit rectificatif...
    Les droit sont bien accorder quand je lance la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     GRANT EXECUTE ON FUNCTION hl.fonction_add(parent_id_  INTEGER, nom_ VARCHAR, ordre_ INTEGER, produit_  VARCHAR) TO hotline_operateur;
    Mais quand je regarde les logs d'apache j'ai le même message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PDOStatement::execute(): SQLSTATE[42501]: Insufficient privilege

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    privilège insuffisant sur quel objet ?

    Faut creuser on ne peut pas deviner à votre place là

  11. #11
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Excusez je pensais que mon message pour le manque de détail ...
    Voilà l'objet c'est ma relation fonction.
    J'essaie d'acceder depuis le web(requête insertion).

    PDOStatement::execute(): SQLSTATE[42501]: Insufficient privilege: 7 ERREUR: droit refusé pour la relation fonction\nCONTEXT: instruction SQL \xc2\xab INSERT INTO hl.fonction(nom, ordre, produit) VALUES( $1 , $2 , $3 ) RETURNING id \xc2\xbb\nPL/ pgSQL function "fonction_add" line 1 at instruction SQL in /var/www/gahl/offline-sites/dao/dao_fonction.php on line 196
    Et à ma ligne 196 (dao) j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          $this->add->bindParam(1, $id_parent, PDO::PARAM_STR);
          $this->add->bindParam(2, $nom_fonction, PDO::PARAM_STR);
          $this->add->bindParam(3, $ordre, PDO::PARAM_STR);
          $this->add->bindParam(4, $nom_produit, PDO::PARAM_STR);
     
     (ligne 196)    $this->add->execute();

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bah là c'est que votre user n'a pas les droits (insertion ?) sur la table.

    Perso j'ai testé en locale.
    Pour qu'un utilisateur autre puisse utiliser la fonction j'ai du :
    - grant les droits sur le schema hl
    - grant les droits sur la table fonction
    - grant les droits sur la sequence associé à la table fonction
    - grant les droits sur la function fonction_add

    et quand je lance ceci, avec mon utilisateur (autre que postgres)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select (0, 'tst_hl', 2, 'ttt');
    Ca fonctionne sans problème.

  13. #13
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Ok je teste cela de suite et je reviens vers vous...
    Merci d'avance.

  14. #14
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bah là c'est que votre user n'a pas les droits (insertion ?) sur la table.

    Perso j'ai testé en locale.
    Pour qu'un utilisateur autre puisse utiliser la fonction j'ai du :
    - grant les droits sur le schema hl
    - grant les droits sur la table fonction
    - grant les droits sur la sequence associé à la table fonction
    - grant les droits sur la function fonction_add

    et quand je lance ceci, avec mon utilisateur (autre que postgres)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select (0, 'tst_hl', 2, 'ttt');
    Ca fonctionne sans problème.




    Merci beaucoup punkoff... j'ai résolu mon problème
    Il y'a quand même de grosse différence sur la gestion des droits entre mysql et postgres.....
    Merci encore

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Ah ça, mais c'est pas un mal ça permet de bien cloisonner chaque utilisateur.

    Vous devriez gérer des role ce sera plus simple (n'oubliez pas qu'un role peut hériter d'un autre role)

  16. #16
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Ah ça, mais c'est pas un mal ça permet de bien cloisonner chaque utilisateur.

    Vous devriez gérer des role ce sera plus simple (n'oubliez pas qu'un role peut hériter d'un autre role)
    Avant je n'accordais les droits que sur la table et je croyais que c'était suffisant...

    OK je m'y mets de suite pour la gestion des droits... Mais y'a t-il peut être un tuto sur cela?

  17. #17
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    regardez les tutos oracle de ce site c'est presque identique

  18. #18
    Membre averti
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Citation Envoyé par punkoff Voir le message
    regardez les tutos oracle de ce site c'est presque identique
    Ok merci... j'y suis là...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/05/2013, 13h06
  2. Réponses: 6
    Dernier message: 27/10/2011, 13h27
  3. connect sys as sysdba Insufficient privilege
    Par mguinot dans le forum Oracle
    Réponses: 1
    Dernier message: 17/07/2006, 14h10
  4. ORA-01031: insufficient privileges
    Par fortlow dans le forum Oracle
    Réponses: 8
    Dernier message: 08/11/2005, 14h52
  5. ora-01031: insufficient privileges avec TOAD
    Par melitta dans le forum Toad
    Réponses: 4
    Dernier message: 03/11/2005, 12h09

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