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

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

Ответ 1

Как вы сказали, в MySQL USAGE есть синоним "без привилегий". Из справочного руководства :

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

USAGE - это способ сообщить MySQL, что учетная запись существует без предоставления каких-либо реальных привилегий этой учетной записи. У них есть просто разрешение на использование MySQL, поэтому USAGE. Он соответствует строке в таблице `mysql`.`user` без каких-либо привилегий.

Предложение IDENTIFIED BY указывает, что для этого пользователя задан пароль. Как мы знаем, кто такой, кто они такие? Они идентифицируют себя, отправляя правильный пароль для своей учетной записи.

Пользовательский пароль является одним из тех атрибутов учетной записи глобального уровня, которые не привязаны к конкретной базе данных или таблице. Он также находится в таблице `mysql`.`user`. Если у пользователя нет других привилегий ON *.*, им предоставляется USAGE ON *.*, и там отображается их хэш. Это часто является побочным эффектом оператора CREATE USER. Когда пользователь создается таким образом, они изначально не имеют привилегий, поэтому им просто предоставляется USAGE.

Ответ 2

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