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 Procédural MySQL Discussion :

Droits liés aux procédures stockées


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut Droits liés aux procédures stockées
    Bonjour,

    J'ai un user proprio d'une base qui possèdent des tables et des procédures sockées. Celles-ci doivent permettre l'écriture dans les tables aux applicatifs.
    Donc un user applicatif n'a pas de droit INSERT ou UPDATE sur les tables puisqu'il appelle une procédure

    Voilà ce que donne un SHOW GRANTS d'un user applicatif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GRANT USAGE ON *.* TO ...
    GRANT EXECUTE ON `base`.* TO
    Ca marche très bien. Le user applicatif arrive à mettre à jour les tables par l'intermédiaire de la procédure. Or je lis dans la doc de MySQL
    MySQL n'utilise pas le droit GRANT EXECUTE. Pour le moment, si une procédure p1() utilise la table t1, l'appelant doit avoir
    les droits sur la table t1 afin que la procédure p1() puisse réussir.
    Si je comprends bien, mon user applicatif ne devrait pas pouvoir mettre à jour la table puisqu'il n'a pas de droits sur la table impactée par la procédure.

    Quelqu'un peut m'expliquer pourquoi ce qui se passe ?

  2. #2
    Membre éprouvé Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 864
    Par défaut
    Salut.

    En fait, lorsque tu crée une procédure stockée en MySQL, tu peux spécifier les paramètres suivants:

    SQL SECURITY {DEFINER | INVOKER}

    Par défaut, si tu ne spécifie rien, c'est DEFINER qui est utilisé.
    Si tu veux appeler la procédure avec les droits de ton USER applicatif et non avec les droits de celui du propriétaire de la procédure, alors tu dois spécifier explicitement SQL SECURITY INVOKER.

    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 PROCEDURE sp_name ([parameter[,...]])
    [characteristic ...] routine_body
     
    CREATE FUNCTION sp_name ([parameter[,...]])
    [RETURNS type]
    [characteristic ...] routine_body
     
    paramètre :
      [ IN | OUT | INOUT ] param_name type
     
    type :
      Any valid MySQL data type
     
    characteristic:
        LANGUAGE SQL
      | [NOT] DETERMINISTIC
      | SQL SECURITY {DEFINER | INVOKER}
      | COMMENT string
     
    routine_body :
      Commande(s) SQL valide(s)

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Ah OK
    Merci pour ces explications.

    En fait, comme je voulais permettre au user applicatif de mettre à jour la table par l'intermédiaire de la procédure, je vais donc utiliser :Question subsidiaire :
    est-il possible d'accorder des droits par procédure ?

    Le "GRANT SELECT ON <base>.<nom_table> TO ..." fonctionne mais pas la meme chose pour les procédures :
    GRANT EXECUTE ON <base>.<nom_procedure> TO ..."
    J'ai du faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT EXECUTE ON <base>.* TO ..."
    C'est pas possible avec MySQL 5 ?

  4. #4
    Membre éprouvé Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 864
    Par défaut
    La même procédure est utilisée par plusieurs MySQL USERS différents?

    - Si non, tu pourrais peut-être ne pas utiliser le DEFINER par défaut et faire plutôt CREATE DEFINER = {TON_USER} PROCEDURE ...

    - Si oui, tu pourrais peut-être créer tes procédures dans différentes bases:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE PROCEDURE mabase1.maprocA ...
    CREATE PROCEDURE mabase1.maprocB ...
    CREATE PROCEDURE mabase2.maprocC ...
    et faire ton GRANT par utilisateur et par base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GRANT EXECUTE ON <base>.mabase1 TO USER1 ...
    GRANT EXECUTE ON <base>.mabase2 TO USER1 ...
    GRANT EXECUTE ON <base>.mabase2 TO USER2 ...

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Ouh la la
    Etant donné qu'il y a plusieurs users, ca devient trop compliqué par rapport à ce que je veux faire.
    Je vais donc laisser le GRANT EXECUTE sur toutes les procédures

    Merci bien pour ces éclaircissements

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

Discussions similaires

  1. Accès aux procédures stockées dans un WCF Data service
    Par tobus2012 dans le forum Services Web
    Réponses: 1
    Dernier message: 26/12/2013, 10h45
  2. Réponses: 2
    Dernier message: 04/04/2008, 09h48
  3. Réponses: 2
    Dernier message: 19/09/2007, 11h57
  4. [SQL SERVER 2K]Droits d'exécution procédure stockée
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/05/2006, 15h01

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