Limiter l'accès à une base mysql

top16500
Invité n'ayant pas de compte PHPfrance

07 mars 2012, 14:13

Bonjour,

J'ai développé un site web ainsi qu'une interface d'administration des pages de contenus ... Jusque là aucun soucis ... Je souhaiterais qu'un administrateur se connectant à l'administration du site ne puisse pas accéder aux pages/articles qui sont en cours d'utilisation par un autre administrateur et là je séche ... Je précise que les pages/articles sont stockés dans une base Mysql, chacune identifiée par un ID unique ...

Votre aide me serait précieuse ...

Merci d'avance et bonne journée à tous(tes)

Mammouth du PHP | 2278 Messages

07 mars 2012, 14:25

Il me semble que :
http://dev.mysql.com/doc/refman/5.0/fr/lock-tables.html
répond à la question. Je m'en sers avec succès dans certains scripts.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

top16500
Invité n'ayant pas de compte PHPfrance

07 mars 2012, 14:37

Merci pour cette réponse rapide ... Je viens de regarder et ça répond en partie à mon soucis ... En effet, je ne souhaite bloquer que les enregistrements déjà utilisés et non la table complète car d'autres enregistrements sont "exploitables" ...

ViPHP
xTG
ViPHP | 7331 Messages

07 mars 2012, 14:48

Euh non lock table n'est pas à utiliser dans un pareil cas, c'est pour gérer les accès concurrentiel en fait...
C'est à utiliser sur un thread, donc pas dans le cadre d'une multiple requêtage client-serveur, sinon on risque de bloquer la table indéfiniment...

Il n'existe pas à ce que je sache un système de verrou par enregistrement.
Mais tu peux en faire un perso, il suffit de rajouter une table (ou un champ) indiquant si l'enregistrement est en cours d'utilisation.
Et un autre avec un timeout surtout pour éviter les blocages permanent.

top16500
Invité n'ayant pas de compte PHPfrance

07 mars 2012, 16:54

Merci pour cette réponse ... Je vais donc gérer ça avec un champ logique "libre/occupé" et me pencher sur le risque que le champ logique reste bloqué à "occupé" et que de ce fait l'enregistrement soit définitivement vérrouillé ...

Merci à vous,

Bonne soirée

ViPHP
ViPHP | 2577 Messages

07 mars 2012, 17:12

Tu peux mettre une date pour indiqué le "occupé" et ainsi ne plus en tenir compte après un certain délai ou passer un traitement de libération de temps en temps.

Mammouth du PHP | 2278 Messages

08 mars 2012, 11:23

Euh non lock table n'est pas à utiliser dans un pareil cas, c'est pour gérer les accès concurrentiel en fait...
C'est à utiliser sur un thread, donc pas dans le cadre d'une multiple requêtage client-serveur, sinon on risque de bloquer la table indéfiniment...
Si
"Je souhaiterais qu'un administrateur se connectant à l'administration du site ne puisse pas accéder aux pages/articles qui sont en cours d'utilisation par un autre administrateur et là je séche .." n'est pas un problème d'accès concurrent (et pas concurrentiel, au passage,...
Si un thread obtient un verrouillage READ sur une table, ce thread (et tous les autres threads) peuvent uniquement accéder a cette table en lecture. Si un thread obtient un verrouillage WRITE sur une table, alors seul le thread qui a posé le verrou peut lire ou écrire sur cette table. Tous les autres threads sont bloqués.
Bien sûr il serait mieux de bloquer un seul enregistrement, et ça existe ailleurs que chez Mysql
mais il existe aussi:
http://dev.mysql.com/doc/refman/5.0/fr/ ... reads.html
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

08 mars 2012, 12:26

Au temps pour moi je n'avais jamais eu connaissance des attributs qu'on pouvait rajouter pour cibler le type de lock.