web-dev-qa-db-fra.com

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

Je suis nouveau dans l'administration de SGBD et je préparais une nouvelle base de données ce soir (avec MySQL) lorsque j'ai remarqué cela. Après avoir accordé un privilège à un utilisateur pour la première fois, un autre octroi ressemblant à

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

La documentation indique que le privilège USAGE signifie "pas de privilèges". Je déduis donc que les droits accordés fonctionnent de manière hiérarchique et qu'un utilisateur doit disposer d'une sorte de privilège sur toutes les bases de données.

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

Edit: Désolé de ne pas l'avoir indiqué à l'origine, les subventions ont été

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user
83
John M Naglick

Comme vous l'avez dit, dans MySQL USAGE est synonyme de "pas de privilèges". Depuis le Manuel de référence MySQL :

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 lui attribuer de réels privilèges. Ils ont simplement la permission d'utiliser le serveur MySQL , d'où USAGE. Cela correspond à une ligne de la table `mysql`.`user` Sans aucun privilège.

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 dit ê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 également dans la table `mysql`.`user`. 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 déclaration CREATE USER. Lorsqu'un utilisateur est créé de cette manière, il ne dispose initialement d'aucun privilège, il ne lui est donc accordé que USAGE.

120
Espresso_Boy

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

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

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

8
5YrsLaterDBA

De plus, les mots de passe mysql lorsque vous n'utilisez pas le IDENTIFIED BY clause, peuvent être des valeurs vides, si non vides, elles peuvent être chiffrées. Mais oui USAGE est utilisé pour modifier un compte en accordant des limiteurs de ressources simples tels que MAX_QUERIES_PER_HOUR, ceci peut à nouveau ê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 USAGE au niveau global, au niveau de la base de données, au niveau de la table, etc ....

3
s1los