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

MS SQL Server Discussion :

Droits d'execution procedures stockés


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut Droits d'execution procedures stockés
    La base sur laquelle on travaille interdit aux utilisateur de faire des "Select" sur une table uen fois connecté sous leur login.
    Par contre elle autorise l'execution des procedure stockés qui servent d'interface a la base.

    Dans une d'entre elle, j'appelle la PS systeme : ps_executesql pour effectuer un select dynamique sur un ensemble de tables.

    Cette appel (strictement interne a une de nos procedures stockés) genere une erreur de droits d'acces si la procedure stocké qui l'appelle est executé depuis un compte utilisateur limité.

    Peut on affiner les droits pour autoriser l'appel a cette PS si elle est execute en interne d'une procedure stocké a nous ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Par défaut
    Bonjour,
    en version 2005, il y a possibilité d'exécuter des procs ou fonctions en tant qu'un autre utilisateur : EXECUTE AS.
    Le principe est de créer un user (toto dans l'exemple) avec les droits nécessaires à une action, lui interdire de pouvoir se connecter (pour la sécurité) et lui faire un GRANT IMPERSONATE.
    Ensuite, dans la procédure on execute le bout de code en tant que user avec + de droits. Enfin on revient à la normal avec REVERT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    EXECUTE AS LOGIN='toto'
    ps_executesql....
    REVERT
    L'aide en ligne l'expliquera certainement mieux que moi.

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    ok.

    ET question cout ? c'est lourd ?

    En fait c'est pour executer la PS "ps_executesql" au sein d'un autre PS qui teste la validité d'une valeur transmise avant traitement sur la base.

    La selection est interdite aux utilisateurs, or cette procedure execute une select sur des tables, ce qui genere une erreur de gestion des droits.

    Le principe : Effectuer un select sur un champs d'un table quelconque dont le nom de la table est transmise en parametre d'une PS.
    La solution aurait ete d'utiliser sp_executesql mais le select qu'elle effectue est visiblement bloqué par les regles de gestion des droits mis en place.
    Le select sur lestables n'est pas autorisé.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Par défaut
    bonjour,
    Je ne me suis pas penché sur le problème de coût, mais je ne pense pas que cela soit lourd (dans le principe), il s'agit seulement de dire au moteur d'executer un bloc d'instruction en prenant d'autre droit. Le coût dépendra surtout du select et de la sp_executesql.
    Mais, si on affecte des droits particuliers pour un bloc de la procédure, il n'est peut-être plus nécessaire de passer par sp_executesql.

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par phoenix38 Voir le message
    Mais, si on affecte des droits particuliers pour un bloc de la procédure, il n'est peut-être plus nécessaire de passer par sp_executesql.

    Ben si car a la base je l'utilise pour exectuer du code SQL generique, dont la chaine textuelle est assemblée a partir de parametre transmis a la PS qui l'appelle ....

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 46
    Par défaut
    Ben si car a la base je l'utilise pour exectuer du code SQL generique, dont la chaine textuelle est assemblée a partir de parametre transmis a la PS qui l'appelle ...
    Oui, effectivement.
    J'avais la même problématique de droits pour restaurer des backups clients pour la hotline et le dev sans que les utilisateurs aient de droits particuliers sur le serveur et cela fonctionne bien avec la méthode execute as.
    Mais je n'utilise pas ps_executesql, seulement exec(...), ce qui, a priori, doit faire la même chose (non ?).

Discussions similaires

  1. [Oracle] executer Procedure Stockée
    Par nah_wah dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/05/2011, 16h53
  2. execution procedure stocké
    Par atanabe dans le forum Oracle
    Réponses: 8
    Dernier message: 20/08/2006, 22h03
  3. Exécution procedure stocké par shell
    Par atanabe dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 17/08/2006, 11h35
  4. Réponses: 2
    Dernier message: 20/04/2006, 14h33
  5. [Debutant][SQL] Execution de procedures stockées
    Par Yannos94 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 18h09

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