web-dev-qa-db-fra.com

impossible de supprimer "GRANT USAGE"

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

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

alors 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 risque pour la sécurité, alors je fais le:

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

Mais cela montre toujours que USAGE accorde 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?

15
Katafalkas

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 dans mysql.user avec 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 ligne dans 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 test ou une base de données dont les 5 premiers caractères sont test_, (recherchez-le en utilisant SELECT * FROM mysql.db WHERE db LIKE 'test%';), alors 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;
20
RolandoMySQLDBA

[~ # ~] utilisation [~ # ~] 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 .

9
Abdul Manaf

Veuillez regarder cette question: -

https://stackoverflow.com/questions/2126225/why-is-a-grant-usage-created-the-first-time-i-grant-a-user-privileges

Fondamentalement, le privilège USAGE agit comme un privilège de niveau système que vous ne pouvez pas supprimer. Il est utilisé en interne par MySQL afin que vous puissiez manipuler le système de privilèges.

2
Kiri