Pourquoi un "GRANT USAGE" est-il créé la première fois que j'accorde des privilèges à un utilisateur?

102

Je suis nouveau dans le côté administrateur du SGBD et je mettais en place une nouvelle base de données ce soir (en utilisant MySQL) quand j'ai remarqué cela. Après avoir accordé à un utilisateur un privilège pour la première fois, une autre subvention est créée qui ressemble à

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

La documentation dit que le USAGEprivilège signifie «pas de privilèges», donc j'en déduis que les subventions fonctionnent de manière hiérarchique et qu'un utilisateur doit peut-être avoir une sorte de privilège pour toutes les bases de données, donc cela sert de fourre-tout?

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

Edit: Désolé de ne pas l'avoir déclaré à l'origine, les subventions étaient

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user
John M Naglick
la source
pouvez-vous s'il vous plaît nous dire la subvention que vous avez gérée
Pentium10

Réponses:

145

Comme vous l'avez dit, dans MySQL USAGEest synonyme de "pas de privilèges". À partir du manuel de référence MySQL :

Le spécificateur de privilèges 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.

USAGEest un moyen de dire à MySQL qu'un compte existe sans lui conférer de réels privilèges. Ils ont simplement l'autorisation d' utiliser le serveur MySQL, par conséquent USAGE. Cela correspond à une ligne du `mysql`.`user`tableau sans privilèges définis.

La IDENTIFIED BYclause 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 s'identifient 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 aussi dans la `mysql`.`user`table. Si l'utilisateur ne dispose d'aucun autre privilège ON *.*, il lui est accordé USAGE ON *.*et son hachage de mot de passe y est affiché. C'est souvent un effet secondaire d'une CREATE USERdéclaration. Lorsqu'un utilisateur est créé de cette manière, il ne dispose initialement d'aucun privilège, il est donc simplement accordé USAGE.

Espresso_Boy
la source
10
Je pense que c'est parce qu'ils sont autorisés à s'authentifier. Si vous essayez avec un utilisateur ou / et un mot de passe incorrects, 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».
Mircea Vutcovici du
11

J'essayais de trouver le sens GRANT USAGE on *.* TOet de trouver ici. Je peux clarifier ce GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordqui sera accordé lorsque vous créez l'utilisateur avec la commande suivante ( CREATE):

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

Lorsque vous accordez un privilège avec GRANT, de nouveaux privilèges seront ajoutés par-dessus.

5 ans plus tardDBA
la source
3

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

s1los
la source