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

Développement SQL Server Discussion :

[SQL Server 2005] Execute et droit d'accès


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Par défaut [SQL Server 2005] Execute et droit d'accès
    Bonjour,

    j'ai un petit problème bizarre :

    Voici ce que j'ai pu tirer du MSDN :

    Aucune autorisation n'est requise pour exécuter l'instruction EXECUTE. Cependant, des autorisations sont requises sur les sécurisables référencés dans la chaîne EXECUTE. Par exemple, si la chaîne contient une instruction INSERT, l'appelant de l'instruction EXECUTE doit posséder l'autorisation INSERT sur la table cible. Les autorisations sont vérifiées au moment où l'instruction EXECUTE est rencontrée, même si celle-ci est incluse dans un module.

    Les autorisations EXECUTE pour un module sont accordées par défaut au propriétaire du module, qui peut les transmettre à d'autres utilisateurs. Lorsqu'un module qui exécute une chaîne est lancé, les autorisationssont vérifiées dans le contexte non pas de l'utilisateur qui a créé le module, mais de celui qui exécute le module. Cependant, si le même utilisateur est propriétaire du module appelant et du module appelé, la vérification de l'autorisation EXECUTE n'a pas lieu pour le second module. Pour plus d'informations, consultez Chaînes de propriétés.
    Tiré d'ici : http://technet.microsoft.com/fr-fr/l...2(SQL.90).aspx

    J"ai créé une connexion test_reader qui possède le droit data_reader. Lorsque j'essaie d'éxécuter une procédure stockée, j'ai le message suivant :

    L'autorisation EXECUTE a été refusée sur l'objet 'SP_LstThemes', base de données 'DemandesFormation', schéma 'dbo'.
    Si j'exécute le contenu de la procédure stockée, tout fonctionne bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET NOCOUNT ON;
    SELECT * From Themes WHERE actif = 1
    Il y a une solution de contournement en spécifiant les éléments sécurisables pour chaque procédure mais c'est très lourd.
    Quelqu'un aurait une explication ?

    Merci d'avance !

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    J"ai créé une connexion test_reader qui possède le droit data_reader.
    Attention, data_reader est un rôle de serveur, pas un droit

    Une connexion (= un login) vous permet de vous connecter à une instance, mais c'est tout.
    Il vous faut ensuite créer un utilisateur dans la base de données qui contient la procédure stockée que vous voulez exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    USE maBD
    GO
    CREATE USER test_reader FOR LOGIN test_reader
    Ensuite vous devez autoriser cet utilisateur à exécuter la procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    USE maBD
    GO
    GRANT EXECUTE ON maProcedure TO test_reader
    @++

  3. #3
    Membre expérimenté Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Par défaut
    Il semblerait que l'utilisateur soit automatiquement créé quand je mappe cette connexion sur la BDD concernée.

    Question toute bête alors : est-il possible d'attribuer un droit pour toutes les SP ? Car quand je défini le rôle sur db_owner, tout fonctionne bien ?

    Je précise à ma décharge que je ne suis qu'un pauvre développeur et pas du tout un DBA (bien que je tente de m'améliorer :o)

    Merci

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Je précise à ma décharge que je ne suis qu'un pauvre développeur et pas du tout un DBA
    Je ne suis pas DBA non plus, et il n'y a pas de mal à poser une question sur un forum

    Il semblerait que l'utilisateur soit automatiquement créé quand je mappe cette connexion sur la BDD concernée.
    Si vous le créez avec Management Studio, c'est le cas, cela revient en fait à exécuter le code que je vous ai donné en exemple

    est-il possible d'attribuer un droit pour toutes les SP ? Car quand je défini le rôle sur db_owner, tout fonctionne bien ?
    C'est effectivement possible mais pas franchement propre.
    Il est mieux de faire un rôle de base de données auquel vous attribuez le droit d'exécution, et ensuite de déclarer tel ou tel utilisateur comme membre de ce rôle.
    Ainsi lorsqu'un nouvel utilisateur aura besoin d'exécuter des procédures sous les mêmes conditions, vous n'aurez plus qu'à le déclarer membre de ce rôle

    @++

  5. #5
    Membre expérimenté Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Par défaut
    Citation Envoyé par elsuket Voir le message
    C'est effectivement possible mais pas franchement propre.
    Il est mieux de faire un rôle de base de données auquel vous attribuez le droit d'exécution, et ensuite de déclarer tel ou tel utilisateur comme membre de ce rôle.
    Ainsi lorsqu'un nouvel utilisateur aura besoin d'exécuter des procédures sous les mêmes conditions, vous n'aurez plus qu'à le déclarer membre de ce rôle

    @++
    C'est noté pour définir un nouveau rôle de serveur et d'y attribuer des utilisateurs. Deux autres questions :
    - Lorsque j'essaie d'attribuer le rôle Execute pour ce rôle, je ne peux le faire que SP par SP. Le problème, c'est que l'on a une BDD à laquelle est rajouter des SP automatiquement tous les jours. On ne peux décemment pas s'amuser à attribuer des droits tous les jours.
    - D'où ma deuxième question : est-il possible de rajouter à un rôle serveur un droit d'éxécution pour toutes les SP présente, a priori la solution pas très propre ?

  6. #6
    Membre expérimenté Avatar de lapanne
    Inscrit en
    Juin 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 200
    Par défaut
    J'ai trouvé la réponse tout seul

    http://www.sqldbatips.com/showarticle.asp?ID=8

    Merci à tous !

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

Discussions similaires

  1. SQL Server 2005 - Gestion des droits
    Par nin33 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/11/2008, 21h15
  2. Réponses: 2
    Dernier message: 21/03/2008, 16h07
  3. [SQL Server 2005] Execute reader-> pb de requete
    Par etnoig dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/05/2007, 23h23
  4. vitesse d'execution Sql server 2005
    Par Erwan56 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/01/2007, 14h37
  5. PB Accès schémas BDD dans sql server 2005
    Par tikam dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/06/2006, 08h42

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