Почему создается «GRANT USAGE» при первом предоставлении пользователю привилегий?

102

Я новичок в административной части СУБД и сегодня вечером настраивал новую базу данных (используя 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
Джон М. Наглик
источник
Вы можете , пожалуйста , сообщите нам грант вы бежать
Pentium10

Ответы:

145

Как вы сказали, в 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, новые привилегии будут добавлены поверх нее.

На 5 лет позже, дБА
источник
3

Кроме того, пароли mysql, когда это IDENTIFIED BYпредложение не используется , могут быть пустыми значениями, если не пустыми, они могут быть зашифрованы. Но да USAGEиспользуется для изменения учетной записи путем предоставления простых ограничителей ресурсов, таких как MAX_QUERIES_PER_HOUR, опять же, это можно указать, также используя предложение WITH в сочетании с GRANT USAGE(привилегии не добавлены) или GRANT ALL, вы также можете указать GRANT USAGEна глобальном уровне, уровне базы данных, уровень стола и т.д ....

s1los
источник