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

PHP & Base de données Discussion :

Verrouiller accès table


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut Verrouiller accès table
    Bonjour,

    Je voudrais savoir comment verrouiller les lignes des tables utilisées par un visiteur.
    Lorsqu'un visiteur ouvre une session (avec session_start() et $_SESSION) je souhaite que toutes les lignes des tables qu'il va utiliser soient verrouillées.
    Pratiquement, le visiteur n° 100 ouvre son espace, je veux que toutes les lignes avec un id 100 soient interdite en écriture pour d'autres visiteurs.
    Il s'agit d'une appli destinée à un organisme de formation ==> des élèves travaillent sur un projet qui est supervisé par un professeur.
    D'avance merci pour vos pistes
    Cdlt

    Je connais la méthode des transactions qui ne me va pas, puisse elle ne permet un verrouillage des lignes que pendant la transaction !
    NB :
    Pour commencer, comment éditer la liste des sessions ouvertes ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le plus viable est d'enregistrer la connexion de l'utilisateur dans la base de données (quitte à gérer entièrement les sessions en BDD d'ailleurs).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut
    Merci pour ta réponse mais tu pourrais développer ?
    "quitte à gérer entièrement les sessions en BDD d'ailleurs", je ne comprends pas, désolé

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    il s'agit de mettre en place une couche au-dessus du système de session et de ton système d'authentification d'utilisateurs, tu as par exemple une table du type :

    s_id | s_user_id | s_time
    id de session | id de l'utilisateur | heure de la dernière mise à jour de session

    avec d'autre champs supplémentaires pour sécuriser un peu plus les sessions, ex : l'ip, le user agent.

    Lors de l'appel d'une page tu mets à jour la date de la session et tu supprimes les sessions obsolètes. Lors de la suppression des sessions obsolètes tu pourras ici débloquer tes lignes de tables SQL. Un autre problème est le lock/delock des lignes, je ne connais pas bien cela mais j'ai l'impression que cela dépend du moteur (MyIsam, InnoDB, etc.). Par exemple j'ai l'impression que MyIsam ne permet que le lock par table entière. Mais si tu utilises la méthode ci-dessus tu peux simplement tester si un enregistrement existe dans la table de sessions avec le user id auquel appartient les lignes avant l'écriture et interdire l'écriture si c'est le cas.

    Tu peux aussi sans doute lire directement les fichiers de sessions sur le serveur si tu ne veux pas développer une surcouche au système de session existant mais il faut que tu aies accès au répertoire des fichiers de sessions. Tu stockes l'id en session, l'id sera donc dans le fichier de session lorsqu'un user se connecte. Lorsqu'un user veut écrire dans une table, tu parcours tous les fichiers de session sur le serveur et teste que l'id ne soit pas présent.

    Sinon tu peux jeter un coup d'oeil du côté de :
    http://www.php.net/manual/en/functio...ve-handler.php

    Tu peux définir des callback pour les fonctions de base des sessions, en revanche je ne sais pas si tu peux détecter la destruction de session non manuelle, peut-être avec le callback gc().

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut
    Merci pour cette super réponse.
    Je regarde ceci dans l'AM et te tiens informé de la suite
    Cdlt

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    tu peux aussi créer des vues: une vue par utilisateur qui contient les attributs des différentes tables sélectionner par "where id = xxx;"

    Ensuite, mettre les droits en écriture pour chaque utilisateur que sur sa vue.

    update, insertion dans la ième vue se répercutera sur la (les) table(s).

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut
    Merci pour toutes ces réponses très intéressantes mais pratiquement maintenant comment je fais pour verrouiller et déverrouiller les lignes des tables concernées ?

    Cdlt

  9. #9
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Bin ça dépend, tu veux utiliser quelle soluce ?
    (Ce que je veux dire c'est que si tu te bases sur les id stockés quelque part, y a pas de verrouillage de table, y a juste une condition pour exécuter les requêtes ou non)

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    avec les vues (une vue par utilisateur), tu mets les droits exactement comme sur une table classique:
    Apparemment, dans ton cas, lecture, écriture, update pour l'utilisateur n° i et l'admin. Eventuellement, lecture pour les utilisateurs n° j avec j différent de i.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut
    je pense utiliser la méthode "des vues" que je comprends bien.

    Malgré le dévouement de plawyx je n'arrive pas à écrire le script qui me bloque par ex. les lignes avec id =100 des tables 1, 2, 3, 6, 8 lorsque le visiteur 100 ouvre sa cession ?

    Je reste une burne sur ce coup là !

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Simple : avant d'executer une requête, tu contrôles les utilisateurs ayant une session en cours.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut
    Ah ouais ! Malin

    Je regarde ceci de plus près pendant le WE.
    Je dois néanmoins ré-organiser un peu mes tables.

    Merci & bonne soirée

    [MàJ] J'ai oublié de préciser que lorsque qu'un visiteur élève travaille sur son dossier son tuteur doit néanmoins pouvoir le lire ==> les lignes ne doivent être verrouillées qu'en écriture et en "delete".
    J'ai beaucoup de mal à imaginer le script !

Discussions similaires

  1. Verrouiller accès table
    Par bronon dans le forum Requêtes
    Réponses: 6
    Dernier message: 11/10/2013, 10h47
  2. Savoir qui verrouille une table ?
    Par infosorome dans le forum Access
    Réponses: 4
    Dernier message: 20/12/2005, 01h28
  3. Probleme Acces Table
    Par jmjmjm dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/12/2005, 21h24
  4. [MySql/PHPMyAdmin]nouvel utilisateur et acces table
    Par Bug's Bunny dans le forum Débuter
    Réponses: 6
    Dernier message: 28/07/2004, 14h03
  5. [Sybase] Accès Table sur serveur distant
    Par MashiMaro dans le forum Sybase
    Réponses: 5
    Dernier message: 11/02/2004, 14h09

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