Чому "ВИКОРИСТАННЯ ВИКОРИСТАННЯ" створено вперше, коли я надаю привілеї користувачеві?


101

Я новачок у адміністративній частині СУБД і налаштовував нову базу даних сьогодні (використовуючи MySQL), коли помітив це. Після надання користувачеві пільги вперше створюється ще один грант, який виглядає так

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

У документації йдеться про те, що USAGEпривілей означає "відсутність привілеїв", тож я роблю висновок, що гранти працюють ієрархічно, і, можливо, користувач повинен мати певний привілей для всіх баз даних, тож це служить для вилову всіх?

Я також не розумію, чому в цьому рядку є IDENTIFIED BYзастереження, коли в створеному мною гранті немає такого (здебільшого тому, що я не розумію, якій цілі IDENTIFIED BYслужить цей пункт).

Редагувати: Вибачте, що не заявили про це спочатку, гранти були

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user

Скажіть, будь ласка, нам грант, який ви
оформили

Відповіді:


144

Як ви вже говорили, у MySQL USAGEє синонімом "без привілеїв". З довідкового посібника MySQL :

Специфікатор привілеїв USAGE означає "відсутність привілеїв". Він використовується на глобальному рівні з GRANT для модифікації атрибутів облікових записів, таких як обмеження ресурсів або характеристики SSL, не впливаючи на існуючі привілеї облікового запису.

USAGEце спосіб сказати MySQL, що обліковий запис існує без надання йому реальних привілеїв. Отже, вони просто мають дозвіл на використання сервера MySQL USAGE. Він відповідає рядку в `mysql`.`user`таблиці без встановлених привілеїв.

IDENTIFIED BYПоложення вказує на те, що встановлений пароль для цього користувача. Звідки ми знаємо, що користувач є тим, ким вони вважаються? Вони ідентифікують себе, надіславши правильний пароль для свого облікового запису.

Пароль користувача - це один із тих атрибутів облікового запису глобального рівня, який не прив’язаний до конкретної бази даних або таблиці. Він також живе в `mysql`.`user`таблиці. Якщо користувач не має інших привілеїв ON *.*, вони надаються USAGE ON *.*і там відображається хеш пароля. Це часто є побічним ефектом CREATE USERзаяви. Коли користувач створений таким чином, вони спочатку не мають привілеїв, тому вони просто надаються USAGE.


10
Я думаю, це тому, що їм дозволено пройти автентифікацію. Якщо ви спробуєте з невірним користувачем або / та паролем, ви не можете перевірити автентифікацію. Користувач з привілеєм USAGE може запускати певні команди SQL, такі як "вибрати 1 + 1" та "показати список процесів".
Мірча Вутковичі

11

Я намагався знайти значення GRANT USAGE on *.* TOі знайшов тут. Я можу уточнити, що GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordбуде надано, коли ви створите користувача за допомогою наступної команди ( CREATE):

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

Коли ви надаєте привілей із GRANT, над ним будуть додані нові права.


3

Крім того, паролі mysql при використанні цього IDENTIFIED BYпункту можуть бути порожніми значеннями, якщо вони не пусті, вони можуть бути зашифровані. Але так USAGEвикористовується для зміни облікового запису, надаючи прості обмежувачі ресурсів, такі як MAX_QUERIES_PER_HOUR, знову ж таки, це можна вказати також за допомогою пункту WITH в поєднанні з GRANT USAGE(без привілеїв додано) або GRANT ALL, також ви можете вказати GRANT USAGEна глобальному рівні, рівні бази даних, рівень таблиці тощо.

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