Effacer des utilisateurs MySQL <<< |
Syntaxe de GRANT et REVOKE | Syntaxe de SET PASSWORD >>> |
14.5.1 Commande de gestions des comptes utilisateurs 14.5 Référence de langage d'administration de la base de données 14 Syntaxe des commandes SQL Manuel de Référence MySQL 4.1 : Version Française . Effacer des utilisateurs MySQL ->Syntaxe de GRANT et REVOKE . Syntaxe de SET PASSWORD |
14.5.1.2 Syntaxe de GRANT et REVOKE
Les informations sur les comptes MySQL sont stockés dans la base mysql . Cette base et son accès sont présentés en détails dans la section Administration de la base . Les droits sont donnés à 4 niveaux :
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 . Mise à jour des tables de droits .Dans les anciennes versions de MySQL, le droit de PROCESS donnait les mêmes droits que le nouveau droit SUPER . 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 !Les droits EXECUTION , FILE , PROCESS , RELOAD , REPLICATION CLIENT , REPLICATION SLAVE , SHOW DATABASES , SHUTDOWN et SUPER sont des droits d'administration, qui ne peuvent être donnés que globalement (avec la syntaxe ON *.* ). Les autres droits peuvent être donnés globalement ou à des niveaux plus spécifiques.Les seuls droits priv_type que vous pouvez donner au niveau d'une table sont SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , GRANT OPTION , INDEX et ALTER . Les seuls droits priv_type que vous pouvez donner au niveau d'une colonne (avec la clause column_list ) sont SELECT , INSERT et UPDATE .GRANT ALL assigne des droits que vous possédez au niveau où vous le possédez. Par exemple, si vous utilisez GRANT ALL ON db_name.* , qui est un droit de niveau de base de données, aucun des droits globaux, comme FILE ne sera donné. MySQL vous permet de donner des droits au niveau d'une base de données, même si la base de données n'existe pas, pour vous aider à préparer l'utilisation de la base de données. Actuellement, MySQL ne vous permet pas de créer des droits pour une table si la table n'existe pas.MySQL ne supprime pas les droits lorsqu'un utilisateur efface une table ou une base. Notez bien : les caractères joker '_' et '%' 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 .
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 :
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.Attention : si vous créez un nouvel utilisateur, mais ne spécifiez pas de clause IDENTIFIED BY , l'utilisateur n'aura pas de mot de passe. Ce n'est pas sécuritaire. Les mots de passe peuvent aussi être modifiés avec la commande SET PASSWORD . Syntaxe de SET PASSWORD .Si vous ne voulez pas transmettre 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) . 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 droit sur une table, elle ne sera pas affichée lorsqu'il demandera la liste des tables avec la commande SHOW TABLES . Si un utilisateur n'a pas de droit dans une base, le nom de la base ne sera pas affiché par SHOW DATABASES à moins que l'utilisateur n'ai un droit de SHOW DATABASES . 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.Vous ne pouvez pas donner un droit que vous ne possédez pas. le droit de GRANT OPTION ne vous donne le droit que de donner les droits que vous possédez. Sachez que si vous donnez à quelqu'un le droit de GRANT OPTION , tous les droits que possède cet utilisateur seront distribuables. Supposez que vous donnez à un utilisateur le droit d' INSERT dans une base de données. Si vous donnez le droit de SELECT sur une base, et spécifiez l'option WITH GRANT OPTION , l'utilisateur peut distribuer non seulement son droit de SELECT , mais aussi son droit de INSERT . Si vous donnez ensuite le droit de UPDATE , il pourra alors distribuer INSERT , SELECT et UPDATE .Il est recommandé de ne pas donner de droits de ALTER à un utilisateur normal. Si vous le faîtes, l'utilisateur pourra essayer de contourner le système de droits en renommant des tables. 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 la consommation de ressources . Note: pour spécifier l'une de ces options pour un utilisateur existant sans ajouter d'autres privilèges additionnels, utilisez GRANT USAGE ... WITH MAX_... .MySQL peut vérifier les attributs X509 en plus des éléments d'identifications habituels, comme le nom d'utilisateur et le mot de passe. Pour spécifier des options SSL pour un compte MySQL, utilisez la clause REQUIRE de la commande GRANT . Pour des informations générales sur SSL et MySQL, voyez Utilisation des connexions sécurisées . Il y a différentes possibilités pour limiter le type de connexions d'un compte :
Les clauses SUBJECT , ISSUER et CIPHER peuvent être combinées avec la clause REQUIRE comme ceci :
Depuis MySQL 4.0.4, le mot clé AND est optionnel entre les clauses de REQUIRE . L'ordre des options est libre, mais les options doivent être spécifiées une seule fois.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 est-ce que les droits prennent effets .Les différences notables entre l'ANSI SQL et MySQL pour la commande GRANT sont :
|
<< | Syntaxe de GRANT et REVOKE | >> |
Effacer des utilisateurs MySQL | Commande de gestions des comptes utilisateurs | Syntaxe de SET PASSWORD |