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

Administration SQL Server Discussion :

droits utilisateurs pour voir une vue et pas les tables associées


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Par défaut droits utilisateurs pour voir une vue et pas les tables associées
    Bonjour à tous,

    cela fait un môment que je cherche et en désespoir je m'adresse à vous.

    Voici ma demande :

    J'ai un serveur sql 2008R2 avec plusieurs base des données

    Dans l'une d'elle (bbd1) j'ai une vue qui appelle des tables de BDD1 (a terme cette vue appelera des tables des autre BDD)
    La vue fonctionne très bien.

    Je souhaite créer un utilisateur avec un accès restreint uniquement à la consultation de la vue.

    j'ai créer une connexion et un user toto dans la base de données BDD1 (ou est la vue) je lui donne le droit en select sur la vue et il la voit, mais quand je fais le select le serveur me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le principal de serveur "toto" ne peut pas accéder à la base de données "BDD1" dans le contexte de sécurité actuel.
    Le user n'a pas de droit sur les tables de la BDD1. L'idée étant qu'il ne puisse requêter que la vue.

    Y a t il une solution? J'imagine que oui et que je ne suis pas le premier, mais laquelle et où est mon erreur?

    Merci d'avance à tous ceux qui me répondront et de le patience pour le faire.
    @+

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Votre utilisateur ne doit pas avoir le privilège de connexion sur la base de données

    Essayez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GRANT CONNECT TO toto

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GRANT CONNECT TO toto
    Merci bcp Aieeuu cela a fonctionné par contre maintenant j'ai étendu ma vue à une autre BDD2 du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM bdd2.dbo.contrat
    LEFT OUTER JOIN dbo.CLIENT ON dbo.CLIENT.id = bdd2.dbo.contrat.id
    j'ai créé le user dans bdd2 avec aussi un grant connect et maintenant j'ai l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L'autorisation SELECT a été refusée sur l'objet 'contrat', base de données 'bdd2', schéma 'dbo'.
    Merci encore

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    à vérifier, mais je pense que le propriétaire de la vue est le même que le propriétaire de la table dbo.CLIENT, donc les privilèges ne sont pas revérifiés.

    Par contre, les privilèges sont bien vérifiés pour la table bdd2.dbo.contrat.
    Vous devez donc autoriser toto a effectuer un SELECT sur la table.

    Si vous ne voulez pas cela, vous pouvez aussi créer une vue dans bdd2 sur la table contrat (uniquement les colonnes qui vous sont nécessaires) avec le même propriétaire que la table contrat, et autoriser la sélection sur la vue uniquement.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Par défaut
    Merci bien Aiiiieeuuu,
    j'ai créé des vue dans l'autre base de donnée et celà fonctionne.

    C'est un peu dommage de devoir recréer des vue de table en plus mais bon au mois le user est vraiment limité aux vue et mes bases et table sont saines.

    Un grand merci.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par jacquemoud Voir le message
    C'est un peu dommage de devoir recréer des vue de table en plus mais bon au mois le user est vraiment limité aux vue et mes bases et table sont saines.
    Ce n'est pas plus dommage que de "devoir" créer un utilisateur avec des privilèges spécifiques pour une application alors qu'avec le login sa, on évite les problèmes de privilèges !

    ça peut en effet paraitre lourd et inutile au premier abord, mais c'est en fait une bonne pratique qui présente de nombreux avantages pour une "surcharge" de travail somme toute assez réduite :
    - comme vous l'avez dit, vous maitrisez bien les privilèges (votre utilisateur n'a accès qu'a certaines colonnes de la table)
    - votre vue dans bdd1 n'est plus directement dépendante de la table contrat : si le modèle de bdd2 change, vous n'aurez qu'a modifier la vue de bdd2 pour qu'elle présente les même données, de la même façon.

    D'ailleurs, pour ce deuxième point, vous devriez peut être lier votre vue au schéma (WITH SCHEMABINDING), afin d’empêcher la modification de la table sous jacente sans modification de la vue elle même...

Discussions similaires

  1. Réponses: 11
    Dernier message: 19/04/2013, 23h35
  2. Réponses: 5
    Dernier message: 01/02/2013, 11h40
  3. Droits pour exécuter une vue qui pointe vers une autre base ?
    Par fredg9 dans le forum Administration
    Réponses: 3
    Dernier message: 08/11/2012, 13h21
  4. Voir les vues mais pas les tables
    Par Yusuke26 dans le forum SQL
    Réponses: 24
    Dernier message: 21/01/2011, 16h56
  5. Réponses: 14
    Dernier message: 23/10/2009, 09h24

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