2010-01-24 2 views
60

Je suis nouveau sur le côté admin de SGBD et je mettais en place une nouvelle base de données ce soir (en utilisant MySQL) quand je l'ai remarqué. Après avoir accordé un utilisateur un privilège pour la première fois, une autre subvention est créé qui ressemble àPourquoi un «GRANT USAGE» est-il créé la première fois que j'accorde des privilèges d'utilisateur?

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password 

La documentation dit que le privilège USAGE signifie « pas de privilèges », donc je déduisant des thats subventions fonctionnent hiérarchiquement et peut-être l'utilisateur doit avoir un certain type de privilège pour toutes les bases de données, donc cela sert comme un tout attraper?

Je ne comprends pas non plus pourquoi cette ligne a une clause lorsque la subvention que j'ai créée n'en a pas (principalement parce que je ne comprends pas à quoi sert la clause).

Edit: Désolé de ne pas indiquant cette origine, les subventions étaient

GRANT ALL PRIVILEGES ON database.* TO admin_user 
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user 
+0

pouvez-vous s'il vous plaît nous dire la subvention que vous avez couru – Pentium10

Répondre

94

Comme vous l'avez dit, MySQL USAGE est synonyme de "pas de privilèges". À partir du MySQL Reference Manual:

Le spécificateur de privilège USAGE signifie «aucun privilège». Il est utilisé au niveau global avec GRANT pour modifier les attributs de compte tels que les limites de ressources ou les caractéristiques SSL sans affecter les privilèges de compte existants.

USAGE est un moyen de dire à MySQL qu'un compte existe sans accorder de privilèges réels à ce compte. Ils ont simplement l'autorisation de utiliser MySQL, d'où USAGE. Il correspond à une ligne de la table `mysql`.`user` sans privilèges.

La clause IDENTIFIED BY indique qu'un mot de passe est défini pour cet utilisateur. Comment savons-nous qu'un utilisateur est ce qu'il prétend être? Ils identifient eux-mêmes en envoyant le mot de passe correct pour leur compte.

Le mot de passe d'un utilisateur est l'un de ces attributs de compte de niveau global qui n'est pas lié à une base de données ou une table spécifique. Il vit également dans le tableau `mysql`.`user`. Si l'utilisateur n'a pas d'autres privilèges ON *.*, ils reçoivent USAGE ON *.* et leur mot de passe est affiché. Ceci est souvent un effet secondaire d'une instruction CREATE USER. Lorsqu'un utilisateur est créé de cette manière, il n'a initialement aucun privilège, ce qui lui confère simplement USAGE.

+5

Etrange: pourquoi appelez-vous l'utiliser quand ils ne veulent PAS PRIVILEGES ... – robsch

+3

Je pense que c'est parce qu'ils sont autorisés à s'authentifier. Si vous essayez avec un mauvais utilisateur ou/et un mot de passe, vous ne pouvez pas vous authentifier. Un utilisateur avec le privilège USAGE peut exécuter certaines commandes SQL telles que 'select 1 + 1' et 'show processlist'. –

3

De plus, les mots de passe mysql lorsqu'ils n'utilisent pas la clause IDENTIFIED BY peuvent être des valeurs vides, s'ils ne sont pas vides, ils peuvent être cryptés. Mais oui USAGE est utilisé pour modifier un compte en accordant des limiteurs de ressources simples comme MAX_QUERIES_PER_HOUR, encore une fois, cela peut être spécifié par également en utilisant la clause WITH, conjointement avec GRANT USAGE (pas de privilèges ajoutés) ou GRANT ALL, vous pouvez également spécifier GRANT USAGE au niveau global, niveau de la base de données, niveau de la table, etc ....

5

J'essayais de trouver la signification de GRANT USAGE on *.* TO et trouvé ici.Je peux préciser que GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password est accordé lorsque vous créer l'utilisateur avec la commande (CREATE) suivante:

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

Lorsque vous subvention privilège GRANT, nouveau privilège de sera ajouté au-dessus de celui-ci.

Questions connexes