невозможно удалить «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' 

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

Ответы:


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;

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, чтобы вы могли управлять системой привилегий.


Так это ведь не какая-то угроза безопасности?
Катафалкас
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.