nie można usunąć „GRANT USAGE”

15

Testowałem kilka rzeczy i dodałem:

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

więc teraz, kiedy to zrobię

show grants for cptnotsoawesome@localhost;

Widzę, że jednym z nich jest:

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

Teraz chcę go usunąć, ponieważ uważam, że jest to zagrożenie bezpieczeństwa, więc wykonuję:

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

Ale nadal pokazuje, że dotacja USAGE na liście dotacji.

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

Jakieś pomysły dlaczego? Co ja robię źle?

Katafalkas
źródło

Odpowiedzi:

20

Pod maską, gdy widzisz użytkownika tylko z USAGE, że użytkownik jest zapisany w tabeli mysql.user przy wyłączonych wszystkich globalnych uprawnieniach.

Pierwotnie stwierdziłeś, że użytkownik miał to:

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

Powinieneś zobaczyć wiersz mysql.userz hasłem MD5 i ustawionymi wszystkimi użytkownikami globals N. Powinieneś także zobaczyć wiersz w mysql.db z

  • user = 'cptnotsoawesome'
  • host = „localhost”
  • db = „statystyka”
  • wszystkie poziomy dostępu do bazy danych ustawione na „Y”

Powinieneś być w stanie je zobaczyć za pomocą tego zapytania

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

Po uruchomieniu polecenia REVOKE po prostu usunąłeś wiersz z mysql.db. Nie dotknęło to rzędu mysql.user. Dlatego nadal możesz zalogować się do mysql i mieć tylko uprawnienia do uruchomienia

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Jeśli istnieje testowa baza danych o nazwie testlub baza danych, której pierwszych 5 znaków to test_(poszukaj jej za pomocą SELECT * FROM mysql.db WHERE db LIKE 'test%';), to użytkownik posiadający tylko USAGE może mieć pełne prawa do testowych baz danych. Pisałem o tym w ServerFault wrz 2011 .

Jeśli chcesz usunąć wiersz z mysql.user, możesz uruchomić

DROP USER cptnotsoawesome@localhost;

lub

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;
RolandoMySQLDBA
źródło
9

UŻYTKOWANIE oznacza, że ​​użytkownik nie ma żadnych uprawnień.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

Nie można w rzeczywistości odwołać USAGE bez upuszczenia użytkownika. USAGE to przywilej na poziomie globalnym.

spójrz na ten link .

Abdul Manaf
źródło
Zrobiłbym to, gdyby robił coś złego w bazie danych, na przykład, jeśli jest to zagrożenie bezpieczeństwa lub coś takiego, w przeciwnym razie - mogę to po prostu zostawić
Katafalkas