не може видалити "ВИКОРИСТАННЯ ВИКОРИСТАННЯ"


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 з

  • user = 'cptnotsoawesome'
  • host = 'localhost'
  • db = 'статистика'
  • всі приватні рівні 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

USAGE означає, що користувач не має жодних привілеїв.

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

Насправді ви не можете скасувати USAGE, не скидаючи користувача.USAGE - це привілей на глобальному рівні.

подивіться на це посилання .


Я б це зробив, якби це робило щось недобре для бази даних, наприклад, якщо це загроза безпеці чи щось подібне, інакше - я можу просто залишити її
Katafalkas

2

Будь ласка, подивіться на це питання: -

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

В основному привілей USAGE діє як привілей на системний рівень, яку ви не можете видалити. Він використовується внутрішньо MySQL, щоб ви могли маніпулювати системою привілеїв.


Тож це не якась загроза безпеці?
Katafalkas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.