Почему «ИСПОЛЬЗОВАНИЕ ГРАНТА» создается при первом предоставлении пользователю привилегий? - PullRequest
80 голосов
/ 24 января 2010

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

Ответы [ 3 ]

117 голосов
/ 19 октября 2010

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

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

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

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

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

7 голосов
/ 15 марта 2013

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

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

Когда вы предоставляете привилегию с GRANT, новые привилегии s будут добавлены поверх нее.

3 голосов
/ 18 декабря 2011

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

...