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?
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
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;
[~ # ~] 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 .
Veuillez regarder cette question: -
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.