Spec-Zone .ru
спецификации, руководства, описания, API

13.7.1.4. GRANT Синтаксис

GRANT    priv_type [(column_list)]      [, priv_type [(column_list)]] ...    ON [object_type] priv_level    TO user_specification [, user_specification] ...    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]    [WITH with_option ...]GRANT PROXY ON user_specification    TO user_specification [, user_specification] ...    [WITH GRANT OPTION]object_type:    TABLE  | FUNCTION  | PROCEDUREpriv_level:    *  | *.*  | db_name.*  | db_name.tbl_name  | tbl_name  | db_name.routine_nameuser_specification:    user    [        IDENTIFIED BY [PASSWORD] 'password'      | IDENTIFIED WITH auth_plugin [AS 'auth_string']    ]ssl_option:    SSL  | X509  | CIPHER 'cipher'  | ISSUER 'issuer'  | SUBJECT 'subject'with_option:    GRANT OPTION  | MAX_QUERIES_PER_HOUR count  | MAX_UPDATES_PER_HOUR count  | MAX_CONNECTIONS_PER_HOUR count  | MAX_USER_CONNECTIONS count

GRANT оператор предоставляет полномочия учетным записям пользователей MySQL. GRANT также подачи, чтобы определить другие характеристики учетной записи, такие как использование безопасных соединений и пределов на доступе к ресурсам сервера. Использовать GRANT, Вы должны иметь GRANT OPTION полномочие, и у Вас должны быть полномочия, которые Вы предоставляете.

Обычно, администратор базы данных сначала использует CREATE USER создать учетную запись, тогда GRANT определить его полномочия и характеристики. Например:

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';GRANT ALL ON db1.* TO 'jeffrey'@'localhost';GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;

Однако, если учетную запись называют в a GRANT оператор уже не существует, GRANT может создать это при условиях, описанных позже в обсуждении NO_AUTO_CREATE_USER Режим SQL.

REVOKE оператор связывается с GRANT и позволяет администраторам удалить полномочия учетной записи. См. Раздел 13.7.1.6,"REVOKE Синтаксис".

Когда успешно выполняющийся из mysql программы, GRANT отвечает Query OK, 0 rows affected. Чтобы определить, что дает следствию полномочия работы, использовать SHOW GRANTS. См. Раздел 13.7.5.22,"SHOW GRANTS Синтаксис".

Есть несколько аспектов к GRANT оператор, описанный под следующими темами в этом разделе:

Важный

Некоторые выпуски MySQL представляют изменения структуре таблиц предоставления, чтобы добавить новые полномочия или функции. Всякий раз, когда Вы обновляете к новой версии MySQL, следует обновить свои таблицы предоставления, чтобы удостовериться, что у них есть текущая структура так, чтобы можно было использовать в своих интересах любые новые возможности. См. Раздел 4.4.7, "mysql_upgrade — Таблицы MySQL Check и Upgrade" .

Полномочия, Поддерживаемые MySQL

Следующая таблица суммирует допустимое priv_type типы полномочия, которые могут быть определены для GRANT и REVOKE операторы. Для дополнительной информации об этих полномочиях см. Раздел 6.2.1, "Полномочия, Обеспеченные MySQL".

Таблица 13.1. Допустимые Полномочия для GRANT иREVOKE

Полномочие Значение
ALL [PRIVILEGES] Предоставьте все полномочия на указанном уровне доступа кроме GRANT OPTION
ALTER Включите использованию ALTER TABLE
ALTER ROUTINE Позвольте сохраненным подпрограммам быть измененными или отброшенными
CREATE Включите табличное создание и база данных
CREATE ROUTINE Включите сохраненному стандартному созданию
CREATE TABLESPACE Позвольте табличным областям и группам файла журнала быть созданными, измененным, или отброшенным
CREATE TEMPORARY TABLES Включите использованию CREATE TEMPORARY TABLE
CREATE USER Включите использованию CREATE USER, DROP USER, RENAME USER, и REVOKE ALL PRIVILEGES
CREATE VIEW Позвольте представлениям быть созданными или измененными
DELETE Включите использованию DELETE
DROP Позвольте базам данных, таблицам, и представлениям быть отброшенными
EVENT Включите использованию событий для Планировщика События
EXECUTE Позвольте пользователю выполнить сохраненные подпрограммы
FILE Позвольте пользователю заставить сервер читать или писать файлы
GRANT OPTION Позвольте полномочиям быть предоставленными или удаленными из других учетных записей
INDEX Включите индексирует, чтобы быть созданным или отброшенным
INSERT Включите использованию INSERT
LOCK TABLES Включите использованию LOCK TABLES на таблицах, для которых Вы имеете SELECT полномочие
PROCESS Позвольте пользователю видеть все процессы с SHOW PROCESSLIST
PROXY Включите пользователю, проксирующему
REFERENCES Не реализованный
RELOAD Включите использованию FLUSH операции
REPLICATION CLIENT Позвольте пользователю спросить, где основные или ведомые серверы
REPLICATION SLAVE Позвольте ведомым устройствам репликации считать двоичные события журнала от ведущего устройства
SELECT Включите использованию SELECT
SHOW DATABASES Включить SHOW DATABASES показать все базы данных
SHOW VIEW Включите использованию SHOW CREATE VIEW
SHUTDOWN Включите использованию mysqladmin завершения работы
SUPER Включите использованию других административных деятельностей такой как CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, и команда mysqladmindebug
TRIGGER Включите триггерным операциям
UPDATE Включите использованию UPDATE
USAGE Синоним для "никаких полномочий"

Триггер связывается с таблицей, так создать или отбросить триггер, Вы должны иметь TRIGGER полномочие для таблицы, не триггер.

В GRANT операторы, ALL [PRIVILEGES] или PROXY полномочие нужно назвать отдельно и не может быть определено наряду с другими полномочиями. ALL [PRIVILEGES] стенды для всех полномочий, доступных для уровня, на котором полномочия состоят в том, чтобы быть предоставлены за исключением GRANT OPTION и PROXY полномочия.

USAGE может быть определен, чтобы создать пользователя, у которого нет никаких полномочий, или определить REQUIRE или WITH пункты для учетной записи, не изменяя ее существующие полномочия.

Информация учетной записи MySQL хранится в таблицах mysql база данных. Эта база данных и система управления доступом обсуждаются экстенсивно в Разделе 6.2, "MySQL Access Privilege System", с которым следует консультироваться для дополнительных деталей.

Если таблицы предоставления содержат строки полномочия, которые содержат имена базы данных смешанного случая или имена таблиц и lower_case_table_names системная переменная устанавливается в ненулевое значение, REVOKE не может использоваться, чтобы отменить эти полномочия. Будет необходимо управлять таблицами предоставления непосредственно. (GRANT не будет создавать такие строки когда lower_case_table_names устанавливается, но такие строки, возможно, были созданы до установки той переменной.)

Полномочия можно предоставить на нескольких уровнях, в зависимости от синтаксиса, используемого для ON пункт. Для REVOKE, то же самое ON синтаксис определяет который полномочия убрать. Примеры, показанные здесь, включают нет IDENTIFIED BY 'password' пункт для краткости, но следует включать тот, если учетная запись уже не существует, чтобы избежать создавать небезопасную учетную запись, у которой нет никакого пароля.

Глобальные Полномочия

Глобальные полномочия являются административными или применяются ко всем базам данных на данном сервере. Чтобы присвоить глобальные полномочия, использовать ON *.* синтаксис:

GRANT ALL ON *.* TO 'someuser'@'somehost';GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';

CREATE TABLESPACE, CREATE USER, FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, и SUPER полномочия являются административными и могут только быть предоставлены глобально.

Другие полномочия можно предоставить глобально или на более определенных уровнях.

MySQL хранит глобальные полномочия в mysql.user таблица.

Полномочия базы данных

Полномочия базы данных применяются ко всем объектам в данной базе данных. Чтобы присвоить полномочия на уровне базы данных, использовать ON db_name.* синтаксис:

GRANT ALL ON mydb.* TO 'someuser'@'somehost';GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';

Если Вы используете ON * синтаксис (а не ON *.*) и Вы выбрали базу данных значения по умолчанию, полномочия присваиваются на уровне базы данных для базы данных значения по умолчанию. Ошибка происходит, если нет никакой базы данных значения по умолчанию.

CREATE, DROP, EVENT, GRANT OPTION, и LOCK TABLES полномочия могут быть определены на уровне базы данных. Таблица или стандартные полномочия также могут быть определены на уровне базы данных, когда они применяются ко всем таблицам или подпрограммам в базе данных.

MySQL хранит полномочия базы данных в mysql.db таблица.

Табличные Полномочия

Табличные полномочия применяются ко всем столбцам в данной таблице. Чтобы присвоить полномочия на уровне таблицы, использовать ON db_name.tbl_name синтаксис:

GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';

Если Вы определяете tbl_name вместо db_name.tbl_name, оператор применяется к tbl_name в базе данных значения по умолчанию. Ошибка происходит, если нет никакой базы данных значения по умолчанию.

Допустимое priv_type значения на табличном уровне ALTER, CREATE VIEW, CREATE, DELETE, DROP, GRANT OPTION, INDEX, INSERT, SELECT, SHOW VIEW, TRIGGER, и UPDATE.

MySQL хранит табличные полномочия в mysql.tables_priv таблица.

Полномочия столбца

Полномочия столбца применяются к единственным столбцам в данной таблице. Каждое полномочие, которое будет предоставлено на уровне столбца, должно сопровождаться столбцом или столбцами, включенными в пределах круглых скобок.

GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';

Допустимое priv_type значения для столбца (то есть, когда Вы используете a column_list пункт), INSERT, SELECT, и UPDATE.

MySQL хранит полномочия столбца в mysql.columns_priv таблица.

Сохраненные Стандартные Полномочия

ALTER ROUTINE, CREATE ROUTINE, EXECUTE, и GRANT OPTION полномочия применяются к сохраненным подпрограммам (процедуры и функции). Их можно предоставить на уровнях базы данных и глобальной переменной. За исключением CREATE ROUTINE, эти полномочия можно предоставить на стандартном уровне для отдельных подпрограмм.

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Допустимое priv_type значения на стандартном уровне ALTER ROUTINE, EXECUTE, и GRANT OPTION. CREATE ROUTINE не полномочие на стандартном уровне, потому что у Вас должно быть это полномочие создать подпрограмму во-первых.

MySQL хранит полномочия на стандартном уровне в mysql.procs_priv таблица.

Проксируйте Пользовательские Полномочия

PROXY полномочие позволяет одному пользователю быть прокси для другого. Пользователь прокси является олицетворением или берет идентификационные данные проксированного пользователя.

GRANT PROXY ON 'localuser'@'localhost' TO 'externaluser'@'somehost';

Когда PROXY предоставляется, это должно быть единственное полномочие, названное в GRANT оператор, REQUIRE пункт не может быть дан, и разрешенное единственное WITH опция WITH GRANT OPTION.

Проксирование требует, чтобы пользователь прокси аутентифицировал через плагин, который возвращает имя проксированного пользователя к серверу, когда пользователь прокси соединяется, и что пользователь прокси имеет PROXY полномочие для проксированного пользователя. Для получения дополнительной информации и примеры, см. Раздел 6.3.8, "Пользователи Прокси".

MySQL хранит полномочия прокси в mysql.proxies_priv таблица.

Для глобальной переменной, базы данных, таблицы, и стандартных уровней, GRANT ALL присваивает только полномочия, которые существуют на уровне, который Вы предоставляете. Например, GRANT ALL ON db_name.* оператор на уровне базы данных, таким образом, он не предоставляет полномочий только для глобальной переменной такой как FILE. Предоставление ALL не присваивается PROXY полномочие.

object_type пункт, если есть должен быть определен как TABLE, FUNCTION, или PROCEDURE когда следующий объект является таблицей, сохраненной функцией, или хранимой процедурой.

Полномочия для базы данных, таблицы, столбца, или подпрограммы формируются аддитивным образом как логическое OR из полномочий на каждом из уровней полномочий. Например, если у пользователя есть глобальная переменная SELECT полномочие, полномочие не может отрицаться отсутствием полномочия в базе данных, таблице, или уровне столбца. Детали проверяющей полномочие процедуры представляются в Разделе 6.2.5, "Управление доступом, Этап 2: Проверка Запроса".

MySQL позволяет Вам предоставить полномочия на базах данных или таблицах, которые не существуют. Для таблиц полномочия, которые будут предоставлены, должны включать CREATE полномочие. Это поведение проектом, и предназначается, чтобы позволить администратору базы данных подготовить учетные записи пользователей и полномочия для баз данных или таблиц, которые должны быть составлены в более позднее время.

Важный

MySQL автоматически не отменяет полномочий, когда Вы отбрасываете базу данных или таблицу. Однако, если Вы отбрасываете подпрограмму, любые полномочия на стандартном уровне, предоставленные для той подпрограммы, отменяются.

Имена учетной записи и Пароли

user значение указывает на учетную запись MySQL который GRANT оператор применяется. Чтобы разместить предоставление прав пользователям от произвольных узлов, MySQL поддерживает определение user значение в форме user_name@host_name. Если a user_name или host_name значение является законным как неупомянутый идентификатор, Вы не должны заключить его в кавычки. Однако, кавычки необходимы, чтобы определить a user_name строка, содержащая специальные символы (такой как"-"), или a host_name строка, содержащая специальные символы или подстановочные символы (такой как"%"); например, 'test-user'@'%.com'. Заключите в кавычки имя пользователя и имя хоста отдельно.

Можно определить подстановочные знаки в имени хоста. Например, user_name@'%.example.com' применяется к user_name для любого узла в example.com домен, и user_name@'192.168.1.%' применяется к user_name для любого узла в 192.168.1 class C подсеть.

Простая форма user_name синоним для user_name@'%'.

MySQL не поддерживает подстановочные знаки в именах пользователей. Чтобы обратиться к анонимному пользователю, определите учетную запись с пустым именем пользователя с GRANT оператор:

GRANT ALL ON test.* TO ''@'localhost' ...

В этом случае любому пользователю, который соединяется от локального узла с корректным паролем для анонимного пользователя, разрешат доступ с полномочиями, связанными с анонимной учетной записью пользователя.

Для дополнительной информации о значениях имени пользователя и имени хоста на имена учетной записи см. Раздел 6.2.3, "Определение Имен учетной записи".

Чтобы определить заключенные в кавычки значения, заключите в кавычки базу данных, таблицу, столбец, и стандартные имена как идентификаторы. Заключите в кавычки имена пользователей и имена хоста как идентификаторы или как строки. Пароли кавычки как строки. Для заключающих в кавычки строку и заключающих в кавычки идентификатор направляющих линий см. Раздел 9.1.1, "Строковые литералы", и Раздел 9.2, "Имена объектов Схемы".

"_"и"%"подстановочные знаки разрешаются, определяя имена базы данных в GRANT операторы, которые предоставляют полномочия на уровнях базы данных или глобальной переменной. Это означает, например, это, если Вы хотите использовать"_"символ как часть имени базы данных, следует определить это как"\_"в GRANT оператор, чтобы предотвратить пользователя от возможности до доступа дополнительные базы данных, соответствующие подстановочный образец; например, GRANT ... ON `foo\_bar`.* TO ....

Предупреждение

Если Вы разрешаете анонимным пользователям соединяться с сервером MySQL, следует также предоставить полномочия всем локальным пользователям как user_name@localhost. Иначе, анонимная учетная запись пользователя для localhost в mysql.user таблица (создаваемый во время установки MySQL) используется, когда названный пользователями пытаются войти в систему к серверу MySQL от локальной машины. Для получения дополнительной информации см. Раздел 6.2.4, "Управление доступом, Этап 1: Проверка Соединения".

Чтобы определить, применяется ли предыдущее предупреждение к Вам, выполните следующий запрос, который перечисляет любых анонимных пользователей:

SELECT Host, User FROM mysql.user WHERE User='';

Чтобы избежать проблемы, только описанной, удалите локальную анонимную учетную запись пользователя, используя этот оператор:

DROP USER ''@'localhost';

GRANT поддерживает имена хоста до 60 символов долго. База данных, таблица, столбец, и стандартные имена могут быть до 64 символов. Имена пользователей могут быть до 16 символов.

Предупреждение

Допустимая длина для имен пользователей не может быть изменена, изменяясь mysql.user таблица. Попытка сделать так результаты в непредсказуемом поведении, которое может даже лишить возможности пользователей входить в систему к серверу MySQL. Никогда недопустимо изменять ни одну из таблиц в mysql база данных любым способом вообще кроме посредством процедуры, описанной в Разделе 4.4.7, "mysql_upgrade — Таблицы MySQL Check и Upgrade" .

Пользовательская спецификация может указать, как пользователь должен аутентифицировать, соединяясь с сервером посредством включения IDENTIFIED BY или IDENTIFIED WITH пункт. Синтаксис является тем же самым что касается CREATE USER оператор. См. Раздел 13.7.1.2,"CREATE USER Синтаксис".

Когда IDENTIFIED BY пункт присутствует, и у Вас есть глобальные полномочия предоставления, пароль становится новым паролем для учетной записи, даже если учетная запись существует и уже имеет пароль. Без IDENTIFIED BY пункт, пароль учетной записи остается неизменным.

Если учетную запись называют в a GRANT оператор не существует в mysql.user таблица, GRANT создает это если NO_AUTO_CREATE_USER Режим SQL не включается. Это очень небезопасно, если Вы не определяете непустое использование пароля IDENTIFIED BY или использование плагина аутентификации IDENTIFIED WITH.

Если учетная запись не существует и NO_AUTO_CREATE_USER включается, GRANT сбои и не создают учетную запись, если Вы не определяете непустой пароль с IDENTIFIED BY или определите IDENTIFIED WITH пункт, чтобы назвать плагин аутентификации.

С MySQL 5.6.12, если учетная запись действительно существует, IDENTIFIED WITH пункт запрещается, потому что он предназначается для использования, создавая новые учетные записи.

Важный

GRANT может быть записан в журналах сервера или в файле истории такой как ~/.mysql_history, что означает, что пароли в виде открытого текста могут быть считаны любым имеющим доступ для чтения к той информации. См. Раздел 6.1.2, "Сохраняя Пароли, Безопасные".

Другие Характеристики Учетной записи

WITH пункт используется в нескольких целях:

WITH GRANT OPTION пункт дает пользователю возможность дать другим пользователям любые полномочия, которые пользователь имеет на указанном уровне полномочий. Следует делать все возможное, кого Вы даете GRANT OPTION полномочие, потому что два пользователя с различными полномочиями могут быть в состоянии объединить полномочия!

Невозможно предоставить другому пользователю полномочие, которое сами Вы не имеете; GRANT OPTION полномочие позволяет Вам присвоить только те полномочия, которыми сами Вы обладаете.

Знайте это, когда Вы предоставляете пользователю GRANT OPTION полномочие на определенном уровне полномочий, любые полномочия пользователь обладает (или может быть дан в будущем) на том уровне, может также быть предоставлен тем пользователем другим пользователям. Предположите, что Вы предоставляете пользователю INSERT полномочие на базе данных. Если Вы тогда предоставляете SELECT полномочие на базе данных и определяет WITH GRANT OPTION, тот пользователь может дать другим пользователям не только SELECT полномочие, но также и INSERT. Если Вы тогда предоставляете UPDATE полномочие пользователю на базе данных, пользователь может предоставить INSERT, SELECT, и UPDATE.

Для неадминистративного пользователя недопустимо предоставить ALTER дайте полномочия глобально или для mysql база данных. Если Вы делаете это, пользователь может попытаться ниспровергать систему полномочия, переименовывая таблицы!

Для дополнительной информации об угрозах безопасности, связанных с определенными полномочиями, см. Раздел 6.2.1, "Полномочия, Обеспеченные MySQL".

Несколько WITH опции пункта определяют пределы на использовании ресурсов сервера учетной записью:

Чтобы определить пределы ресурса для существующего пользователя, не влияя на существующие полномочия, использовать GRANT USAGE на глобальном уровне (ON *.*) и назовите пределы, которые будут изменены. Например:

GRANT USAGE ON *.* TO ...  WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;

Пределы, не определенные, сохраняют свою текущую стоимость.

Для получения дополнительной информации по ограничению доступа к ресурсам сервера см. Раздел 6.3.4, "Устанавливая Пределы Ресурса Учетной записи".

MySQL может проверить атрибуты сертификата X509 в дополнение к обычной аутентификации, которая основана на имени пользователя и пароле. Чтобы определить связанные с SSL опции для учетной записи MySQL, используйте REQUIRE пункт GRANT оператор. (Для вводной информации об использовании SSL с MySQL см. Раздел 6.3.9, "Используя SSL для Безопасных Соединений".)

Есть много различных возможностей для того, чтобы ограничить типы подключения для сделанного отчета:

SUBJECT, ISSUER, и CIPHER опции могут быть объединены в REQUIRE пункт как это:

GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost'  IDENTIFIED BY 'goodsecret'  REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/    O=MySQL demo client certificate/    CN=Tonu Samuel/emailAddress=tonu@example.com'  AND ISSUER '/C=FI/ST=Some-State/L=Helsinki/    O=MySQL Finland AB/CN=Tonu Samuel/emailAddress=tonu@example.com'  AND CIPHER 'EDH-RSA-DES-CBC3-SHA';

Порядок опций не имеет значения, но никакая опция не может быть определена дважды. AND ключевое слово является дополнительным между REQUIRE опции.

Если Вы используете таблицу, столбец, или стандартные полномочия для даже одного пользователя, сервер исследует таблицу, столбец, и стандартные полномочия для всех пользователей, и это замедляет MySQL немного. Точно так же, если Вы ограничиваете число запросов, обновлений, или соединений для каких-либо пользователей, сервер должен контролировать эти значения.

MySQL и Стандартные Версии SQL GRANT

Самые большие различия между MySQL и стандартными версиями SQL GRANT :