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
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 :
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 :
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 :
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 .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 :
|
<< | Syntaxe de GRANT et REVOKE | >> |
Administration du serveur | Gestion des comptes utilisateurs de MySQL | Nom d'utilisateurs MySQL et mots de passe |