RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Vues et droits d'accès

Forum : MYSQL
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ MYSQL

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM MYSQL

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
tibi666
Nouveau membre
Inscrit : 27/04/2007
Messages : 3
Message
#131955
Posté le 27/04/07 à 14:06
Bonjour à tous,

Je me hurte à un problème relativement génant. A savoir que dans ma version de mySQL (5.0.37), pour permettre à un utilisateur de consulter une vue, il doit avoir les droits d'accès en "SELECT" sur les tables permettants de générer cette vue, alors que je lui ai donné les droit d'accès "SELECT, SHOW VIEW" sur la vue en question.

Je trouve cela étrange que les droits des objets de type "vue" ne soient pas dissociés des droits sur les tables dont sont issues les données de la vue.

Pour information cela fonctionnait dans la version 5.0.15 Smiley

Donc ma question, en plus clair est concis est : comment peut on donner des droit d'accès à une vue sans pour autant donner des droits d'accès aux tables ayant permis de générer cette vue Smiley

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

tibi666
Nouveau membre
Inscrit : 27/04/2007
Messages : 3
Message
#132163
Posté le 30/04/07 à 11:57
bon ben j'ai trouvé

J'ai utilisé un compte intermédiaire, compte qui sera connu que de l'administrateur.

Donc voila comment j'ai procédé :

1 - Création des comptes :

'view_user'@'localhost' sera le compte qui a les droits en SELECT sur la base db_source et sur la base db_view. C'est lui qui sera le DEFINER de toutes les requêtes à l'exception de une.

'mon_user'@'localhost' est le compte de l'utilisateur qui aura les droits SELECT et SHOW VIEW sur la base db_view, plus le droit de SELECT sur la table db_source.utilisateur. C'est ce compte là qui sera utilisé pour créer la vue db_view.utilisateur qui ne contiendra qu'un seul enregistrement correspondant à son identifiant unique utilisé dans toute la base de données.


Code :

GRANT SELECT ON medw.* TO 'view_user'@'localhost' IDENTIFIED BY '******';
GRANT SELECT, SHOW VIEW ON db_view.* TO 'view_user'@'localhost' IDENTIFIED BY '******';
GRANT SELECT ON db_source.utilisateur TO 'mon_user'@'localhost' IDENTIFIED BY '******';
GRANT SELECT, SHOW VIEW ON db_view.* TO 'mon_user'@'localhost' IDENTIFIED BY '******';

2 - création de la première vue. C'est la seule qui nécessite un droit d'accès à une table de la base db_source, sachant que c'est la table user et qu'on peut limiter les accès uniquement à une colonne, sont identifiant unique :


Code :
CREATE OR REPLACE DEFINER = CURRENT_USER SQL SECURITY INVOKER VIEW db_view.utilisateur AS
SELECT id
FROM db_source.utilisateur
WHERE username = SUBSTRING_INDEX(CURRENT_USER(), '@', 1);
On note DEFINER = CURRENT_USER et SQL SECURITY INVOKER qui signifient que ce sont les droits de 'mon_user'@'localhost' qui seront utilisés comme créateur de la vue [DEFINER] et comme exécutant de la vue [SQL SECURITY INVOKER]

En suite on crée les autres vues avec les options DEFINER = 'view_user'@'localhost' et SQL SECURITY DEFINER qui signifie qu'on force le fait que c'est le compte 'view_user'@'localhost' qui a définie la vue [DEFINER] et qu'on utilise ce même compte pour exécuter cette vue, même si c'est le compte 'mon_user'@'localhost' qui est utlisé pour exécuter les requètes. Et comme la vue db_view.utilisateur me sert dans toutes mes jointures, c'est elle qui me permet de ne remonter que les données spécifique de l'utilisateur et de maintenir ainsi la confidentialité des données qu'il n'a pas à consulter.

Ce qui est exactement ce que je veux !!!

Mission accomplished

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 


    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.