невозможно удалить «GRANT USAGE»

15

Я тестировал некоторые вещи и добавил:

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

так что теперь, когда я делаю

show grants for cptnotsoawesome@localhost;

Я вижу, что один из них:

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

Теперь я хочу удалить его, так как считаю, что это угроза безопасности, поэтому я делаю:

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

Но это все еще показывает, что USAGE предоставляет в списке грантов.

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

Есть идеи почему? Что я делаю неправильно?

Katafalkas
источник

Ответы:

20

Под капотом, когда вы видите пользователя только с USAGE, этот пользователь записывается в таблицу mysql.user с отключенными всеми глобальными привилегиями.

Вы первоначально заявили, что пользователь имел это:

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

Вы должны увидеть строку mysql.userс паролем MD5 и всеми глобальными привилегиями, установленными в N. Вы также должны увидеть строку в mysql.db с

  • Пользователь = 'cptnotsoawesome'
  • хост = «локальный»
  • DB = 'Статистика'
  • для всех уровней базы данных установлено значение «Y»

Вы должны быть в состоянии увидеть их с этим запросом

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

Когда вы запустили команду REVOKE, вы просто удалили строку из mysql.db. Это не коснулось строки в mysql.user. Таким образом, вы все еще можете войти в MySQL и иметь только привилегии для запуска

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

Если существует тестовая база данных testили база данных, чьи первые 5 символов test_(ищите ее с помощью SELECT * FROM mysql.db WHERE db LIKE 'test%';), то пользователь с только USAGE может иметь полные права на тестовые базы данных. Я написал об этом в ServerFault сентябрь 2011 года .

Если вы хотите удалить строку из mysql.user, вы можете запустить

DROP USER cptnotsoawesome@localhost;

или

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;
RolandoMySQLDBA
источник
9

ИСПОЛЬЗОВАНИЕ означает, что у пользователя нет никаких привилегий.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

Вы не можете на самом деле отозвать USAGE без удаления пользователя. USAGE является привилегией глобального уровня.

Посмотрите на эту ссылку .

Абдул Манаф
источник
Я сделал бы это, если бы это делало что-то неправильное с базой данных, например, если это угроза безопасности или что-то в этом роде, в противном случае - я могу просто оставить это
Katafalkas
2

Пожалуйста, посмотрите на этот вопрос: -

/programming/2126225/why-is-a-grant-usage-created-the-first-time-i-grant-a-user-privileges

По сути, привилегия USAGE действует как привилегия системного уровня, которую вы не можете удалить. Он используется внутри MySQL, чтобы вы могли управлять системой привилегий.

Kiri
источник
Так это ведь не какая-то угроза безопасности?
Катафалкас