kann "GRANT USAGE" nicht entfernen

15

Ich habe ein paar Sachen getestet und folgendes hinzugefügt:

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

Also jetzt, wenn ich es tue

show grants for cptnotsoawesome@localhost;

Ich kann sehen, dass einer von ihnen ist:

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

Jetzt möchte ich es entfernen, da ich denke, dass es ein Sicherheitsrisiko ist, also mache ich Folgendes:

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

Aber es zeigt immer noch, dass USAGE Grant in der Grant-Liste.

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

Irgendwelche Ideen warum? Was mache ich falsch?

Katafalkas
quelle

Antworten:

19

Unter der Haube, wenn Sie nur einen Benutzer mit USAGE sehen, der mit allen deaktivierten globalen Berechtigungen in die Tabelle mysql.user geschrieben ist.

Sie haben ursprünglich angegeben, dass der Benutzer Folgendes hat:

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

Sie sollten eine Zeile mysql.usermit dem MD5-Passwort und allen globalen Privilegien sehen, die auf gesetzt sind N. Sie sollten auch eine Zeile in mysql.db mit sehen

  • user = 'cptnotsoawesome'
  • host = 'localhost'
  • db = 'statistics'
  • alle DB-Level-Privilegien auf 'Y' gesetzt

Sie sollten sie mit dieser Abfrage sehen können

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

Beim Ausführen des Befehls REVOKE haben Sie einfach die Zeile aus entfernt mysql.db. Dies hat die Reihe in nicht berührt mysql.user. Sie könnten sich also immer noch bei mysql anmelden und nur die Privilegien haben, um zu laufen

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Wenn es eine aufgerufene Testdatenbank testoder eine Datenbank mit den ersten 5 Zeichen gibt test_(suchen Sie sie mit SELECT * FROM mysql.db WHERE db LIKE 'test%';), kann der Benutzer mit nur NUTZUNG die vollständigen Rechte für die Testdatenbanken haben. Ich habe darüber in ServerFault Sep 2011 geschrieben .

Wenn Sie die Zeile aus mysql.user entfernen möchten, können Sie entweder ausführen

DROP USER cptnotsoawesome@localhost;

oder

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

USAGE bedeutet, dass der Benutzer keine Berechtigungen hat.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

Sie können USAGE nicht wirklich widerrufen, ohne den Benutzer fallen zu lassen. USAGE ist ein globales Privileg.

werfen Sie einen Blick auf diesen Link .

Abdul Manaf
quelle
Ich würde es tun, wenn das irgendetwas an der Datenbank falsch machen würde, zum Beispiel wenn es eine Sicherheitsbedrohung oder so ist, sonst - ich lasse es einfach
Katafalkas