Jusqu'à la version 4.0.2, la seule méthode possible pour
limiter l'utilisation des ressources serveurs MySQL était de
configurer la variable de démarrage
max_user_connections
avec une valeur non
nulle. De même, le nombre de connexions simultanées pouvaient
être limitées pour un compte, mais pas les opérations
réalisables, une fois l'utilisateur connecté. Ces deux types
de contrôles ont importants pour les administrateurs systèmes
et les fournisseurs de services.
Depuis MySQL 4.0.2, il est possible de limiter certaines ressources accessibles à un utilisateur possible :
Nombre de requête par heure : Toutes les commandes qu'un utilisateur peut exécuter.
Nombre de modifications par heure : Toute commande qui implique la modification d'une table ou d'une base.
Nombre de connexions réalisées par heure : Le nombre de nouvelles connexions par heure.
Toute commande que le client émet compte pour la limiter de requêtes. Seules les commandes qui modifient les tables ou bases comptant pour la limite de modifications.
Pour utiliser cette fonctionnalité, la table
user
de la base mysql
doit
contenir les colonnes nécessaires pour stocker les limites. Les
limites doivent être stockées dans les colonnes
max_questions
, max_updates
et max_connections
. Si votre table
user
ne dispose pas de ces colonnes, elle
doit être mise à jour. Voyez
Section 2.6.7, « Mise à jour des tables de droits ».
Par défaut, les utilisateurs ne sont pas limités dans
l'utilisation des ressources ci-dessus, à moins que des limites
ne leur soient imposées. Ces limites peuvent être configurées
uniquement via la commande GRANT (*.*)
, avec
cette syntaxe :
Pour spécifier des limites de ressources avec la commande
GRANT
, utilisez la clause
WITH
pour chaque ressource que vous voulez
limiter. Par exemple, pour créer un nouveau compte avec un
accès à la base customer
, mais sans abuser,
utilisez ceci :
mysql>GRANT ALL ON customer.* TO 'francis'@'localhost'
->IDENTIFIED BY 'frank'
->WITH MAX_QUERIES_PER_HOUR 20
->MAX_UPDATES_PER_HOUR 10
->MAX_CONNECTIONS_PER_HOUR 5;
Les types de limite n'ont pas besoin d'être tous appelés avec
WITH
, mais ils peuvent être appelés dans
n'importe quel ordre. La valeur de chaque limite doit être un
entier représentant le nombre autorisé par heure. Si la
commande GRANT
n'a pas de clause
WITH
, les limites valent alors 0, c'est à
dire qu'il n'y a pas de limite.
Pour configurer et changer les limites d'un compte existant,
utilisez la commande GRANT USAGE
au niveau
global, avec ON *.*
. La commande suivante
modifie la limite de requêtes du compte
francis
à 100 :
mysql>GRANT USAGE ON *.* TO 'francis'@'localhost'
->WITH MAX_QUERIES_PER_HOUR 100;
Cette commande ne touche pas aux droits du compte : elle ne modifie que les valeurs des limites.
Pour supprimer une limite existante, donnez lui la valeur de 0.
Par exemple, pour supprimer la limite de connexions de
francis
, utilisez cette commande :
mysql>GRANT USAGE ON *.* TO 'francis'@'localhost'
->WITH MAX_CONNECTIONS_PER_HOUR 0;
Le compteur d'utilisation des ressources se met en marche dès que la limite n'est pas nulle.
Durant le fonctionnement du serveur, les ressources utilisées sont comptées. Si le compte atteint la limite de connexions dans un intervalle d'une heure, les connexions suivantes sont rejetées, jusqu'à la fin de l'heure. Similairement, si le compte atteint la limite de requête dans un intervalle d'une heure, les requêtes suivantes sont sont rejetées, jusqu'à la fin de l'heure. Dans tous les cas, un message approprié est affiché.
Le compte de ressource est fait par compte, et non pas client. Par exemple, si votre compte a une limite de requêtes de 50, vous ne pouvez pas augmenter votre limite à 100 en vous connectant deux fois. Les requêtes issues des deux connexions seront alors comptées ensemble.
Le compte courant d'utilisation peut être remis à zéro, globalement, ou individuellement :
Pour remettre à zéro les compteurs pour tous les comptes,
faites un FLUSH USER_RESOURCES
. Les
comptes sont remis à zéro au moment du re-chargement des
tables de droits : par exemple, avec la commande
FLUSH PRIVILEGES
ou la commande
mysqladmin reload
.
Les comptes individuels peuvent être remis à zéro en
donnant de nouvelles limites ou changeant les droits. Pour
cela, utilisez GRANT USAGE
tel que
décrit précédemment, en donnant la même limite que celle
qui est configurée.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.