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 :

[Utilisateur] bloquer des lignes


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut [Utilisateur] bloquer des lignes
    Hello tout le monde..

    Est ce qu'il est possible de créer des utilisateurs sous mysql et de leur autorisé l'accès uniquement sur certaine ligne ?

    par exemple uniquement sur les lignes qu'il ont créer eux meme ?

    Si c'est pas possible comment faite vous pour protéger les données présent dans la base de donnée ?

    merci

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Il n'est pas possible de savoir de manière simple qui a inséré telle ou telle ligne. En revanche on peut créer une vue qui ne comportera que certaines lignes de la table d'origine, et ne donner au user que les privilèges sur cette vue et pas la table (plus d'explications ici).

    Sinon, par utilisateur tu entends utilisateur de la base de données ou de l'application ?
    Pensez au bouton

  3. #3
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    J'aurais peut-être une solution, qui a certes ses inconvénients. Le premier étant qu'il faut utiliser MySQL >= 5.

    Comme le dit Maximilian, on ne connaît pas qui a inséré les lignes. Donc la première chose à faire serait de rajouter une colonne "Utilisateur" (VARCHAR(80) devrait être bon) à la table. Ensuite, à chaque insertion, on appelle USER() pour stocker l'utilisateur qui exécute la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO client VALUES (..., ..., USER());
    Ensuite, on crée donc une vue où tous les utilisateurs auront le privilège SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE VIEW mes_clients AS SELECT col1, col2, ... FROM client WHERE utilisateur = USER();
    Eh voilà : à chaque fois qu'un utilisateur fera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM mes_clients
    il obtiendra les infos des clients qu'il a insérés dans la table Client.

    Les inconvénients qui me viennent à l'esprit :

    • si on modifie un utilisateur (username), il faut modifier la table Client
    • ca prend quand même beaucoup de place si on a beaucoup de clients !

  4. #4
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Maximilian
    Sinon, par utilisateur tu entends utilisateur de la base de données ou de l'application ?
    Des utilisateurs de la base de donnée !

    Pcq en faite j'aimerais faire une appli qui se connecte directement à la base ! Les utilisateurs auront un login et un mot de passe que j'aurais auparavant créer sous mysql !

    Le problème avec l'enregistrement du user dans la table c'est que j'ai pas mal de table ! j'me vois pas trop le stoquer dans chaque !

    Ou alors j'ai pensé faire une base de donnée par personne mais bon ca me parait un peu lourd, non ?

  5. #5
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par soad
    Le problème avec l'enregistrement du user dans la table c'est que j'ai pas mal de table ! j'me vois pas trop le stoquer dans chaque !

    Ou alors j'ai pensé faire une base de donnée par personne mais bon ca me parait un peu lourd, non ?
    Ca prendra moins de place, c'est sûr. Mais à gérer, c'est sûrement pas mieux.

    A chaque changement des utilisateurs (ajout par exemple), il va sûrement te falloir changer certaines tes requêtes pour prendre en compte la nouvelle base. Je pense notamment si tu as un utilisateur "admin" qui peut accéder à tous les enregistrements dans ton appli.

  6. #6
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    A mon avis tout dépend de ton appli :

    - Si c'est une sorte de PHPMyAdmin où les utilisateurs saisissent des commandes SQL, alors tu seras obligé comme la plupart des hébergeurs d'avoir une table ou une base par user.
    Tu peux tester la solution de Biglo mais c'est vrai que ça risque d'être un peu lourd au niveau performances (et le WHERE utilisateur = USER() n'est-il pas interprété au moment de la création de la vue ?)

    - Pour une appli plus classique, avoir un user SGBD pour chaque user du programme est une assez mauvaise idée. En effet le SGBD n'est pas (encore ?) un outil assez perfectionné pour intégrer les règles de gestion selon lesquelles tel utilisateur a accès à telles ou telles données précises. Pour preuve les problèmes de privilèges sur des lignes.
    Ce boulot relève plus de la logique métier codée dans l'application.
    Pensez au bouton

  7. #7
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par Maximilian
    et le WHERE utilisateur = USER() n'est-il pas interprété au moment de la création de la vue ?
    Pas de soucis de ce côté. Les expressions sont interprétées à l'exécution de la requête.

  8. #8
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Biglo
    Ca prendra moins de place, c'est sûr. Mais à gérer, c'est sûrement pas mieux.
    C'est vrai que coté maintenance c'est pas super !


    Citation Envoyé par Maximilian
    A mon avis tout dépend de ton appli :

    - Si c'est une sorte de PHPMyAdmin où les utilisateurs saisissent des commandes SQL, alors tu seras obligé comme la plupart des hébergeurs d'avoir une table ou une base par user.
    Tu peux tester la solution de Biglo mais c'est vrai que ça risque d'être un peu lourd au niveau performances (et le WHERE utilisateur = USER() n'est-il pas interprété au moment de la création de la vue ?)

    - Pour une appli plus classique, avoir un user SGBD pour chaque user du programme est une assez mauvaise idée. En effet le SGBD n'est pas (encore ?) un outil assez perfectionné pour intégrer les règles de gestion selon lesquelles tel utilisateur a accès à telles ou telles données précises. Pour preuve les problèmes de privilèges sur des lignes.
    Ce boulot relève plus de la logique métier codée dans l'application.
    Les utilisateurs ne peuvent pas exécuter de code SQL mais le risque c'est qu'il se connecte avec autres chose que l'appli !


    On peut faire des triggers avec les dernières version de mysql ou bien ?
    Est ce qu'on peut déclencher un trigger sur une requête de sélection ?

  9. #9
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par soad
    On peut faire des triggers avec les dernières version de mysql ou bien ?
    Est ce qu'on peut déclencher un trigger sur une requête de sélection ?
    On peut créer des triggers depuis la version 5, mais qui se déclenchent avant/après une insertion, modification ou suppression.

    Que veux-tu faire ? Tu peux peut-être créer une procédure qui ferait le traitement que tu désires, puis qui génère le résultat du SELECT.

  10. #10
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par soad
    Les utilisateurs ne peuvent pas exécuter de code SQL mais le risque c'est qu'il se connecte avec autres chose que l'appli !
    Tu penses à quoi en particulier ? Question sécurité il me semble qu'il y a des parades bien plus efficaces et moins lourdes que ce que tu essaies de mettre en place...
    Pensez au bouton

  11. #11
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Biglo
    On peut créer des triggers depuis la version 5, mais qui se déclenchent avant/après une insertion, modification ou suppression.

    Que veux-tu faire ? Tu peux peut-être créer une procédure qui ferait le traitement que tu désires, puis qui génère le résultat du SELECT.
    En faite je pensais remplacer les vue par un trigger qui contrôle qu'on ne fasse pas un sélect sur des données autres que les siens ! Mais bon c'est plus simple les vue a mon avis !


    Citation Envoyé par Maximilian
    Tu penses à quoi en particulier ? Question sécurité il me semble qu'il y a des parades bien plus efficaces et moins lourdes que ce que tu essaies de mettre en place...
    Bon pour finir je pense que je vais faire des pages php qui ferons le liens entre mysql et mon appli ! comme ca j'aurais plus de problème !

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

Discussions similaires

  1. Bloquer des touches (filtrer la frappe de l'utilisateur)
    Par Battant dans le forum Général Java
    Réponses: 2
    Dernier message: 10/01/2011, 10h41
  2. [WD15] Table en saisie bloquer des lignes
    Par thierrybatlle dans le forum WinDev
    Réponses: 3
    Dernier message: 15/09/2010, 09h36
  3. Réponses: 2
    Dernier message: 29/05/2008, 11h06
  4. Réponses: 4
    Dernier message: 24/04/2003, 22h28
  5. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15

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