impossible de supprimer "GRANT USAGE"

15

Je testais des trucs et j'ai ajouté un:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';

maintenant quand je fais

show grants for cptnotsoawesome@localhost;

Je peux voir que l'un d'eux est:

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Maintenant, je veux le supprimer car je pense que c'est un danger pour la sécurité, alors je fais le:

REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Mais cela montre toujours que la subvention USAGE figure dans la liste des subventions.

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

Des idées pourquoi? Qu'est-ce que je fais mal?

Katafalkas
la source

Réponses:

20

Sous le capot, lorsque vous voyez un utilisateur avec USAGE uniquement, il est écrit dans la table mysql.user avec tous les privilèges globaux désactivés.

Vous avez initialement déclaré que l'utilisateur avait ceci:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 

Vous devriez voir une ligne mysql.useravec le mot de passe MD5 et tous les privilèges globaux définis sur N. Vous devriez également voir une ligne dans mysql.db avec

  • user = 'cptnotsoawesome'
  • host = 'localhost'
  • db = 'statistiques'
  • tous les niveaux de base privés définis sur «Y»

Vous devriez pouvoir les voir avec cette requête

SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND host='localhost'
AND db='statistics'\G

Lorsque vous avez exécuté la commande REVOKE, vous avez simplement supprimé la ligne de mysql.db. Cela n'a pas touché la rangée mysql.user. Ainsi, vous pouvez toujours vous connecter à mysql et ne disposer que des privilèges pour fonctionner

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

S'il existe une base de données de test appelée testou une base de données dont les 5 premiers caractères sont test_(recherchez-la en utilisant SELECT * FROM mysql.db WHERE db LIKE 'test%';), l'utilisateur avec seulement USAGE peut avoir tous les droits sur les bases de données de test. J'ai écrit à ce sujet dans ServerFault sept . 2011 .

Si vous souhaitez supprimer la ligne de mysql.user, vous pouvez soit exécuter

DROP USER cptnotsoawesome@localhost;

ou

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;
RolandoMySQLDBA
la source
9

USAGE signifie que l'utilisateur n'a aucun privilège.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

Vous ne pouvez pas réellement révoquer USAGE sans supprimer l'utilisateur. USAGE est un privilège de niveau global.

jetez un oeil à ce lien .

Abdul Manaf
la source
Je le ferais, si cela faisait quelque chose de mal à la base de données, comme s'il s'agissait d'une menace pour la sécurité ou quelque chose comme ça, sinon - je peux juste le laisser
Katafalkas