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


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.