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 :

Echec GRANT dans une procédure


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 37
    Par défaut Echec GRANT dans une procédure
    Bonjour,

    Je n'arrive pas à faire un grant sur un utilisateur dans ma procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    s_CreateUser:='CREATE USER ' || sUserName || ' WITH PASSWORD ' || quote_literal(sPassword);
    s_AffecteRoleUti:='GRANT MONROLE TO ' ||  sUserName || ' WITH ADMIN OPTION';
     
    Execute s_CreateUser;
    Execute s_AffecteRoleUti;
    L'erreur retournée est "le rôle "MONROLE" n'existe pas. Mais ce rôle existe bien dans ma base...

    Si je remplace le sUserName par quote_literal(sUserName ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s_AffecteRoleUti:='GRANT MONROLE TO ' ||  quote_literal(sUserName ) || ' WITH ADMIN OPTION';
    j'ai : "erreur de syntaxe sur ou près de " 'username' "

    Auriez-vous une idée sur ce qui ne va pas ?

    Merci

  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
    Pour le quote_literal ce n'est pas la bonne fonction c'est quote_ident qu'il faut utiliser.

    Pour le rôle qui n'existe pas, le SQL montré n'est pas le bon.

    En effet il n'est pas possible de faire GRANT MONROLE (sans guillemets autour, ce qui implique une conversion implicite en minuscules) et d'obtenir une erreur mentionnant "MONROLE" avec des majuscules.

    Il est préférable de copier verbatim les messages et les commandes.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 37
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    En effet, l'erreur est "le rôle "monrole" n'existe pas" donc en minuscules.
    Mais dans la base, le nom du rôle est bien en majuscules.
    Il faut que j'utilise la fonction quote_ident pour le nom du rôle ?

    Merci

  4. #4
    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
    Ou bien quote_ident(variable) si le rôle est dans une variable, ou directement GRANT "MONROLE" TO... s'il reste en dur dans la requête.

    La règle étant que s'il y a des guillemets autour des identifiants, ils ne sont pas convertis en minuscules, sinon ils le sont implicitement.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 11
    Par défaut
    Bonjour,

    confronté exactement au même problème, cette solution m'a affiché l'erreur en citant le rôle MONROLE en majuscules

    code appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GRANT "MONROLE" TO AUTREROLE
    Erreur affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    la colonne « MONROLE» n'existe pas

    Le rôle étant en majuscule auparavant, quel serait le problème dans ce cas ?

    Merci pour vos indications

  6. #6
    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
    Faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select rolname from pg_roles;
    dans la base pour avoir les noms effectifs.

    Sinon le message d'erreur cité se plaint du nom d'une colonne donc je pense qu'il ne correspond pas (non plus!) à l'instruction SQL montrée.

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Vérification du type de données dans une procédure stockée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 11h20
  3. Marquer une pause dans une procédure stockée
    Par PéPénet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2003, 10h42
  4. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31
  5. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30

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