Services webmasters
Partenaires
Jeux concours gratuits
 
Administration du serveur
<<<
Syntaxe de GRANT et REVOKE Nom d'utilisateurs MySQL et mots de passe
>>>

4.3 Gestion des comptes utilisateurs de MySQL
4 Administration du serveur
 Manuel de Référence MySQL 4.1 : Version Française

->Syntaxe de GRANT et REVOKE
Nom d'utilisateurs MySQL et mots de passe
Quand les modifications de privilèges prennent-ils effets ?
Création des premiers droits MySQL
Ajouter de nouveaux utilisateurs à MySQL
Limiter les ressources utilisateurs
Configurer les mots de passe
Garder vos mots de passe en lieu sûr
Utilisation des connexions sécurisées

4.3.1 Syntaxe de GRANT et REVOKE


GRANT priv_type [(liste_colonnes)] [, priv_type [(liste_colonnes)] ...]
    ON {nom_de_table | * | *.* | nom_base.*}
    TO nom_utilisateur [IDENTIFIED BY [PASSWORD] 'password']
        [, nom_utilisateur [IDENTIFIED BY 'password'] ...]
    [REQUIRE
        NONE |
        [{SSL| X509}]
    [CIPHER cipher [AND]]
    [ISSUER issuer [AND]]
    [SUBJECT subject]]
    [WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # |
                          MAX_UPDATES_PER_HOUR # |
                          MAX_CONNECTIONS_PER_HOUR #]]

REVOKE priv_type [(liste_colonnes)] [, priv_type [(liste_colonnes)] ...]
    ON {nom_de_table | * | *.* | nom_base.*}
    FROM nom_utilisateur [, nom_utilisateur ...]
GRANT est disponible depuis MySQL version 3.22.11. Pour les versions plus anciennes de MySQL, la commande GRANT ne fait rien.

Les commandes GRANT et REVOKE permettent aux administrateurs système de créer des utilisateurs, de leur donner ou de leur retirer des droits, sur 4 niveaux :

    Niveau global
    Les droits globaux s'appliquent à toutes les bases de données d'un serveur. Ces droits sont stockés dans la table mysql.user . REVOKE ALL ON *.* retirera seulement les privilèges globaux.
    Niveau base de données
    Les droits de niveau de base de données s'appliquent à toutes les tables d'une base de données. Ces droits sont stockés dans les tables mysql.db et mysql.host . REVOKE ALL ON db.* retirera seulement les privilèges de base de données.
    Niveau table
    Les droits de table s'appliquent à toutes les colonnes d'une table. Ces droits sont stockés dans la table mysql.tables_priv . REVOKE ALL ON db.table retirera seulement les privilèges de table.
    Niveau colonne
    Les droits de niveau de colonnes s'appliquent à des colonnes dans une table. Ces droits sont stockés dans la table mysql.columns_priv . Quand vous utilisez REVOKE vous devez spécifier les mêmes colonnes qui s'étaient vues accorder des privilèges.
Si vous donnez des droits à un utilisateur qui n'existe pas, vous créerez cet utilisateur. Pour voir des illustrations du fonctionnement de la commande GRANT , voyez Ajouter de nouveaux utilisateurs à MySQL .

Pour les commandes GRANT et REVOKE , la clause priv_type peut être spécifiée par les constantes suivantes :

ALL [PRIVILEGES] Tous les droits sauf WITH GRANT OPTION .
ALTER Autorise l'utilisation de ALTER TABLE .
CREATE Autorise l'utilisation de CREATE TABLE .
CREATE TEMPORARY TABLES Autorise l'utilisation de CREATE TEMPORARY TABLE .
DELETE Autorise l'utilisation de DELETE .
DROP Autorise l'utilisation de DROP TABLE .
EXECUTE Autorise l'utilisateur à exécuter des procédures stockées (pour MySQL 5.0).
FILE Autorise l'utilisation de SELECT ... INTO OUTFILE et LOAD DATA INFILE .
INDEX Autorise l'utilisation de CREATE INDEX et DROP INDEX .
INSERT Autorise l'utilisation de INSERT .
LOCK TABLES Autorise l'utilisation de LOCK TABLES sur les tables pour lesquelles l'utilisateur a les droits de SELECT .
PROCESS Autorise l'utilisation de SHOW FULL PROCESSLIST .
REFERENCES Réservé pour le futur.
RELOAD Autorise l'utilisation de FLUSH .
REPLICATION CLIENT Donne le droit à l'utilisateur de savoir où sont les maîtres et esclaves.
REPLICATION SLAVE Nécessaire pour les esclaves de réplication (pour lire les historiques binaires du maître).
SELECT Autorise l'utilisation de SELECT .
SHOW DATABASES SHOW DATABASES affiche toutes les bases de données.
SHUTDOWN Autorise l'utilisation de mysqladmin shutdown .
SUPER Autorise une connexion unique même si max_connections est atteind, et l'exécution des commandes CHANGE MASTER , KILL thread , mysqladmin debug , PURGE MASTER LOGS et SET GLOBAL .
UPDATE Autorise l'utilisation de UPDATE .
USAGE Synonyme de ``pas de droits''.
GRANT OPTION Synonyme pour WITH GRANT OPTION

USAGE peut être utilisé lorsque vous voulez créer un utilisateur sans aucun droit.

Les droits de CREATE TEMPORARY TABLES , EXECUTE , LOCK TABLES , REPLICATION ... , SHOW DATABASES et SUPER sont nouveaux en version 4.0.2. Pour utiliser ces droits après mise à jour en 4.0.2, vous devez exécuter le script mysql_fix_privilege_tables .

Dans les anciennes versions de MySQL, le droit de PROCESS donnait les mêmes droits que le nouveau droit SUPER .

Pour retirer le droit de GRANT à un utilisateur, utilisez les mêmes valeurs de priv_type avec GRANT OPTION :

mysql> REVOKE GRANT OPTION ON ... FROM ...;
Les valeurs de priv_type que vous pouvez spécifier pour une table sont SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , GRANT OPTION , INDEX et ALTER .Les seules valeurs de priv_type que vous pouvez spécifier pour une colonne, lorsque vous utilisez la clause liste_colonnes ), sont SELECT , INSERT et UPDATE .

Vous pouvez donner des droits globaux en utilisant la syntaxe ON *.* . Vous pouvez donner des droits de base en utilisant la syntaxe ON nom_base.* . Si vous spécifiez ON * et que vous avez une base de données qui est déjà sélectionnée, vous allez donner des droits pour la base de données courante. Attention : si vous spécifiez ON * et que vous n'avez pas de base courante, vous allez affecter les droits au niveau du serveur !

Notez bien : les caractères joker '_' and '%' sont autorisés lors de la spécification de noms dans la commande GRANT . Cela signifie que si vous voulez utiliser par exemple le caractère littéral '_' comme nom de base, vous devez le spécifier sous la forme '\_' dans la commande GRANT , pour éviter à l'utilisateur d'accéder à d'autres bases, dont le nom pourrait correspondre au masque d'expression régulière ainsi créé. Utilisez plutôt GRANT ... ON `foo\_bar`.* TO ... .

Afin de permettre l'identification des utilisateurs depuis des hôtes arbitraires, MySQL supporte la spécification du nom d'utilisateur nom_utilisateur sous la forme user@host . Si vous voulez spécifier un nom d'utilisateur user qui contient des caractères spéciaux tels que '-' , ou une chaîne d'hôte host qui contient des caractères joker (comme '%' ), vous pouvez placer le nom de l'utilisateur ou de l'hôte entre guillemets (par exemple, 'test-utilisateur'@'test-nomdhote' ).

Vous pouvez spécifier des caractères jokers dans le nom d'hôte. Par exemple, user@'%.loc.gov' fait correspondre l'utilisateur user de n'importe quel hôte du domaine loc.gov , et user@'144.155.166.%' fait correspondre l'utilisateur user à n'importe quelle adresse de la classe C 144.155.166 .

La forme simple de user est synonyme de user@"%" .

MySQL ne supporte pas de caractères joker dans les noms d'utilisateur. Les utilisateurs anonymes sont définis par l'insertion de ligne avec User='' dans la table mysql.user , ou en créant un utilisateur avec un nom vide, grâce à la commande GRANT .

Note : si vous autorisez des utilisateurs anonymes à se connecter à votre serveur, vous devriez aussi donner ces droits à tous les utilisateurs locaux user@localhost car sinon, la ligne dans la table mysql.user sera utilisée lorsque l'utilisateur se connectera au serveur MySQL depuis la machine locale !

Vous pouvez vérifier si cela s'applique à vous en exécutant la requête suivante :

mysql> SELECT Host,User FROM mysql.user WHERE User='';
Actuellement, la commande GRANT supporte uniquement les noms d'hôte, colonne, table et bases de données d'au plus 60 caractères. Un nom d'utilisateur peut être d'au plus 16 caractères.Les droits pour les tables et colonnes sont combinés par OU logique, avec les quatre niveaux de droits. Par exemple, si la table mysql.user spécifie qu'un utilisateur a un droit global de SELECT , ce droit ne pourra pas être annulé au niveau base, table ou colonne.

Les droits d'une colonne sont calculés comme ceci :


droit global
OR (droit de base de données ET droit d'hôte)
OR droit de table
OR droit de colonne
Dans la plupart des cas, vous donnez des droits à un utilisateur en utilisant un seul des niveaux de droits ci-dessus, ce qui fait que la vie n'est pas aussi compliquée. Le détails de la procédure de vérification des droits et disponible dans Sécurité générale et accès à MySQL .

Si vous donnez des droits à une paire utilisateur/hôte qui n'existe pas dans la table mysql.user , une ligne sera créée et restera disponible jusqu'à son effacement avec la commande DELETE . En d'autre termes, GRANT crée une ligne dans la table user , mais REVOKE ne la supprime pas. Vous devez le faire explicitement avec la commande DELETE .

Avec MySQL version 3.22.12 ou plus récent, si un nouvel utilisateur est créé, ou si vous avez les droits de GRANT globaux, le mot de passe sera configuré avec le mot de passe spécifié avec la clause IDENTIFIED BY , si elle est fournie. Si l'utilisateur a déjà un mot de passe, il sera remplacé par ce nouveau.

Si vous ne voulez pas faire passer le mot de passe en texte clair, vous pouvez immédiatement utiliser l'option PASSWORD suivi du mot de passe déjà chiffré avec la fonction PASSWORD() ou l'API C make_scrambled_password(char *to, const char *password) .

Attention : si vous créez un nouvel utilisateur, mais que vous ne spécifiez pas la clause IDENTIFIED BY , l'utilisateur n'aura pas de mot de passe. Ce n'est pas sûr.

Les mots de passe peuvent aussi être modifiés par la commande SET PASSWORD . Syntaxe de SET .

Si vous donnez les droits de base, une ligne sera ajoutée dans la table mysql.db . Lorsque les droits sur cette base seront supprimés avec la commande REVOKE , cette ligne disparaîtra.

Si un utilisateur n'a pas de droits sur une table, elle ne sera pas affichée lorsqu'il requiert la liste des tables avec la commande SHOW TABLES .

La clause WITH GRANT OPTION donne à l'utilisateur le droit de donner les droits qu'il possède à d'autres utilisateurs. La plus grande prudence est recommandée pour cette commande, car il permettra à terme à deux utilisateurs de combiner les droits dont ils disposent.

MAX_QUERIES_PER_HOUR # , MAX_UPDATES_PER_HOUR # et MAX_CONNECTIONS_PER_HOUR # sont nouveaux en MySQL 4.0.2. Ces deux options limitent le nombre de requêtes et de modifications qu'un utilisateur peut réclamer dans une heure. Si # vaut 0 (valeur par défaut), alors cela signifie qu'il n'y a pas de limitations pour cet utilisateur. Limiter les ressources utilisateur . Note: pour spécifier l'une de ces options pour un utilisateur existant sans ajouter d'autres privilèges additionels, utilisez GRANT USAGE ... WITH MAX_... .

Vous ne pouvez pas donner à un autre utilisateur un droit que vous ne possédez pas vous-même. Le droit de GRANT vous donne le droit de diffuser les droits dont vous disposez déjà.

Soyez bien conscient que lorsque vous donnerez le droit de GRANT à un niveau particulier, tous les droits qu'un utilisateur possède déjà (où qui lui seront donnés dans le futur) seront alors diffusables à d'autres individus. Supposons que vous donnez les droits de INSERT à un utilisateur, pour une table. Si vous ajoutez le droit de WITH GRANT OPTION , cet utilisateur peut donner le droit de SELECT mais aussi celui d' INSERT . Si vous donnez aussi le droit de UPDATE , il pourra alors diffuser les droits de INSERT , SELECT et UPDATE .

Il est recommandé de ne pas donner les droits de ALTER à un utilisateur normal. Si vous le faites, les utilisateurs pourront alors contourner le système de droits en renommant des tables !

Notez que si vous utilisez des droits de niveau table ou colonne même pour un utilisateur, le serveur vérifiera alors ces droits pour tous les utilisateurs, et cela ralentira MySQL un peu.

Lorsque mysqld démarre, tous les droits sont stockés en mémoire. Les droits de bases, tables et colonnes prennent aussitôt effet, et les droits des utilisateurs prendront effet dès leur prochaine configuration. Les modifications sur les tables de droits que vous effectuez avec les commandes GRANT et REVOKE sont prises en compte immédiatement par le serveur. Si vous modifiez manuellement les tables (avec INSERT , UPDATE , etc...), vous devez exécuter la commande FLUSH PRIVILEGES , ou la commande en ligne mysqladmin flush-privileges pour indiquer au serveur qu'il doit recharger les droits. Quand les changements de privilèges prennent-ils effet ? .

Les différences notables entre l'ANSI SQL et MySQL pour la commande GRANT sont :

  • Les droits MySQL sont donnés pour une combinaison nom d'utilisateur + nom d'hôte, et non pas pour un nom d'hôte seulement.
  • L'ANSI SQL n'a pas de droits globaux ou de niveau base de données, et l'ANSI SQL ne supporte pas tous les types de droits que MySQL supporte. MySQL ne supporte pas le droit ANSI SQL de TRIGGER ou UNDER .
  • Les droits ANSI SQL sont structurés de manière hiérarchique. Si vous supprimez un utilisateur, tous les droits donnés à cet utilisateur seront supprimés. Avec MySQL, les droits ne sont pas automatiquement supprimés, et vous devez les supprimer manuellement, si besoin.
  • Avec MySQL, si vous avez le droit de INSERT sur uniquement quelques colonnes de la table, vous pourrez exécuter des insertions. Les colonnes pour lesquelles vous n'avez pas de droit prendront alors leur valeur par défaut. L'ANSI SQL vous impose d'avoir les droits d' INSERT sur toutes les colonnes.
  • Lorsque vous détruisez une table avec ANSI SQL, tous les droits liés à la table sont supprimés. Si vous supprimez un droit en ANSI SQL, tous les droits qui étaient basés sur ce droit sont supprimés. Avec MySQL, les droits peuvent être abandonnés explicitement avec la commande REVOKE , ou en manipulant les tables de droits de MySQL.
Pour une description de l'utilisation de REQUIRE , voyez Utilisation des connexions sécurisées .

<< Syntaxe de GRANT et REVOKE >>
Administration du serveur Gestion des comptes utilisateurs de MySQL Nom d'utilisateurs MySQL et mots de passe
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -