Spec-Zone.ru › MySQL 5.7

6.2.2 Предоставляемые привилегии MySQL

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

  • Административные привилегии позволяют пользователям управлять работой сервера MySQL. Эти привилегии являются глобальными, так как не относятся к конкретной базе данных.

  • Привилегии базы данных относятся к базе данных и всем объектам в ней. Эти привилегии могут быть предоставлены для конкретных баз данных или глобально, чтобы они применялись ко всем базам данных.

  • Привилегии для объектов базы данных, таких как таблицы, индексы, представления и хранимые процедуры, могут быть предоставлены для конкретных объектов внутри базы данных, для всех объектов данного типа внутри базы данных (например, для всех таблиц в базе данных) или глобально для всех объектов данного типа во всех базах данных.

Информация о привилегиях учетной записи хранится в таблицах предоставления в базе данных системы mysql. Подробное описание структуры и содержимого этих таблиц см. в разделе 6.2.3 «Таблицы предоставления». Сервер MySQL считывает содержимое таблиц предоставления в память при запуске и перезагружает их в указанных обстоятельствах, описанных в разделе 6.2.9 «Когда изменения привилегий вступают в силу». Сервер основывает решения об управлении доступом на копиях таблиц предоставления в памяти.

Важно

В некоторых версиях MySQL в таблицы предоставления вносятся изменения для добавления новых привилегий или функций. Чтобы воспользоваться новыми возможностями, обновите таблицы предоставления до текущей структуры при обновлении MySQL. См. раздел 2.10 «Обновление MySQL».

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

  • Краткое описание доступных привилегий

  • Описание привилегий

  • Руководство по предоставлению привилегий

Краткое описание доступных привилегий

В следующей таблице представлены имена привилегий, используемые в GRANT и REVOKE операторах, вместе с именем столбца, связанным с каждой привилегией в таблицах предоставления, и контекстом применения этой привилегии.

Таблица 6.2 Разрешенные привилегии для GRANT и REVOKE

Таблица 6.2 Разрешенные привилегии для GRANT и REVOKE
Привилегия Столбец таблицы предоставления Контекст
ALL [PRIVILEGES] Синоним для “все привилегии” Администрирование сервера
ALTER Alter_priv Таблицы
ALTER ROUTINE Alter_routine_priv Хранимые процедуры
CREATE Create_priv Базы данных, таблицы или индексы
CREATE ROUTINE Create_routine_priv Хранимые процедуры
CREATE TABLESPACE Create_tablespace_priv Администрирование сервера
CREATE TEMPORARY TABLES Create_tmp_table_priv Таблицы
CREATE USER Create_user_priv Администрирование сервера
CREATE VIEW Create_view_priv Представления
DELETE Delete_priv Таблицы
DROP Drop_priv Базы данных, таблицы или представления
EVENT Event_priv Базы данных
EXECUTE Execute_priv Хранимые процедуры
FILE File_priv Доступ к файлам на хосте сервера
GRANT OPTION Grant_priv Базы данных, таблицы или хранимые процедуры
INDEX Index_priv Таблицы
INSERT Insert_priv Таблицы или столбцы
LOCK TABLES Lock_tables_priv Базы данных
PROCESS Process_priv Администрирование сервера
PROXY См. таблицу proxies_priv Администрирование сервера
REFERENCES References_priv Базы данных или таблицы
RELOAD Reload_priv Администрирование сервера
REPLICATION CLIENT Repl_client_priv Администрирование сервера
REPLICATION SLAVE Repl_slave_priv Администрирование сервера
SELECT Select_priv Таблицы или столбцы
SHOW DATABASES Show_db_priv Администрирование сервера
SHOW VIEW Show_view_priv Представления
SHUTDOWN Shutdown_priv Администрирование сервера
SUPER Super_priv Администрирование сервера
TRIGGER Trigger_priv Таблицы
UPDATE Update_priv Таблицы или столбцы
USAGE Синоним для “без привилегий” Администрирование сервера

Описание привилегий

В данном списке приведены общие описания каждой привилегии, доступной в MySQL. Отдельные SQL-запросы могут иметь более конкретные требования к привилегиям, чем указано здесь. В этом случае описание соответствующего запроса предоставляет подробную информацию.

  • ALL, ALL PRIVILEGES

    Эти спецификаторы привилегий являются сокращениями для “всех доступных привилегий на данном уровне” (кроме GRANT OPTION). Например, предоставление ALL на глобальном или уровне таблицы предоставляет соответственно все глобальные привилегии или все привилегии на уровне таблицы.

  • ALTER

    Разрешает использование запроса ALTER TABLE для изменения структуры таблиц. ALTER TABLE также требует привилегий CREATE и INSERT. Для переименования таблицы требуется ALTER и DROP на старой таблице, CREATE и INSERT на новой таблице.

  • ALTER ROUTINE

    Разрешает использование запросов, которые изменяют или удаляют хранимые процедуры и функции.

  • CREATE

    Разрешает использование запросов для создания новых баз данных и таблиц.

  • CREATE ROUTINE

    Разрешает использование запросов для создания хранимых процедур и функций.

  • CREATE TABLESPACE

    Разрешает использование запросов для создания, изменения или удаления табличных пространств и групп файлов журнала.

  • CREATE TEMPORARY TABLES

    Разрешает создание временных таблиц с помощью запроса CREATE TEMPORARY TABLE.

    После того, как сессия создала временную таблицу, сервер не выполняет дальнейшей проверки привилегий для этой таблицы. Создавшая сессия может выполнять любые операции с таблицей, такие как DROP TABLE, INSERT, UPDATE или SELECT. Дополнительную информацию см. в разделе 13.1.18.2, «Запрос CREATE TEMPORARY TABLE».

  • CREATE USER

    Разрешает использование запросов ALTER USER, CREATE USER, DROP USER, RENAME USER и REVOKE ALL PRIVILEGES.

  • CREATE VIEW

    Разрешает использование запроса CREATE VIEW.

  • DELETE

    Разрешает удаление строк из таблиц в базе данных.

  • DROP

    Разрешает использование запросов для удаления (удаления) существующих баз данных, таблиц и представлений. Привилегия DROP требуется для использования запроса ALTER TABLE ... DROP PARTITION для разграниченных таблиц. Привилегия DROP также необходима для TRUNCATE TABLE.

  • EVENT

    Разрешает использование запросов для создания, изменения, удаления или отображения событий для планировщика событий.

  • EXECUTE

    Разрешает использование запросов для выполнения хранимых процедур и функций.

  • FILE

    Воздействует на следующие операции и поведение сервера:

    • Разрешает чтение и запись файлов на хосте сервера с помощью запросов LOAD DATA и SELECT ... INTO OUTFILE и функции LOAD_FILE(). Пользователь с привилегией FILE может читать любые файлы на хосте сервера, которые доступны для всех или для сервера MySQL. (Это подразумевает, что пользователь может читать любые файлы в любом каталоге базы данных, так как сервер имеет доступ ко всем этим файлам.)

    • Разрешает создание новых файлов в любом каталоге, к которому сервер MySQL имеет доступ на запись. Это включает каталоги данных сервера, содержащие файлы, реализующие таблицы привилегий.

    • С версии MySQL 5.7.17, разрешает использование опции DATA DIRECTORY или INDEX DIRECTORY таблицы для запроса CREATE TABLE.

    В целях безопасности сервер не перезаписывает существующие файлы.

    Для ограничения местоположения чтения и записи файлов установите системную переменную secure_file_priv в определенный каталог. См. раздел 5.1.7, «Системные переменные сервера».

  • GRANT OPTION

    Разрешает предоставлять или отзывать привилегии другим пользователям, которые у вас есть.

  • INDEX

    Разрешает использование запросов для создания или удаления индексов. INDEX относится к существующим таблицам. Если у вас есть привилегия CREATE для таблицы, вы можете включить определения индексов в запрос CREATE TABLE.

  • INSERT

    Разрешает вставку строк в таблицы в базе данных. INSERT также требуется для запросов ANALYZE TABLE, OPTIMIZE TABLE и REPAIR TABLE.

  • LOCK TABLES

    Разрешает использование явных запросов LOCK TABLES для блокировки таблиц, для которых у вас есть привилегия SELECT. Это включает использование блокировок на запись, которые предотвращают чтение заблокированной таблицы другими сессиями.

  • PROCESS

    Привилегия PROCESS контролирует доступ к информации о потоках, выполняемых на сервере (то есть, информации о выполняемых запросах сессий). Информация о потоках, доступная с помощью оператора SHOW PROCESSLIST, команды mysqladmin processlist, таблицы INFORMATION_SCHEMA.PROCESSLIST и таблицы Performance Schema processlist, доступна следующим образом:

    • С привилегией PROCESS пользователь имеет доступ к информации обо всех потоках, даже принадлежащих другим пользователям.

    • Без привилегии PROCESS неанонимные пользователи имеют доступ к информации о своих потоках, но не о потоках других пользователей, а анонимные пользователи не имеют доступа к информации о потоках.

    Примечание

    Таблица Performance Schema threads также предоставляет информацию о потоках, но доступ к таблице использует другую модель привилегий. См. Раздел 25.12.16.4, «Таблица threads».

    Привилегия PROCESS также позволяет использовать оператор SHOW ENGINE, доступ к таблицам INFORMATION_SCHEMA InnoDB (таблицы с именами, начинающимися с INNODB_), и (начиная с MySQL 5.7.31) доступ к таблице INFORMATION_SCHEMA FILES.

  • PROXY

    Позволяет одному пользователю имитировать или стать известным как другой пользователь. См. Раздел 6.2.14, «Пользователи-прокси».

  • REFERENCES

    Для создания внешнего ключа требуется привилегия REFERENCES для родительской таблицы.

  • RELOAD

    Привилегия RELOAD позволяет выполнять следующие операции:

    • Использование оператора FLUSH.

    • Использование команд mysqladmin, которые эквивалентны операциям FLUSH: flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh и reload.

      Команда reload сообщает серверу перегрузить таблицы разрешений в память. flush-privileges — синоним для reload. Команда refresh закрывает и повторно открывает файлы журналов и очищает все таблицы. Другие команды flush-xxx выполняют функции, аналогичные refresh, но более специфичны и могут быть предпочтительнее в некоторых случаях. Например, если нужно очистить только файлы журналов, flush-logs — лучший выбор, чем refresh.

    • Использование опций mysqldump, которые выполняют различные операции FLUSH: --flush-logs и --master-data.

    • Использование оператора RESET.

  • REPLICATION CLIENT

    Позволяет использовать операторы SHOW MASTER STATUS, SHOW SLAVE STATUS и SHOW BINARY LOGS.

  • REPLICATION SLAVE

    Позволяет учетной записи запрашивать обновления, внесенные в базы данных на сервере-источнике, используя операторы SHOW SLAVE HOSTS, SHOW RELAYLOG EVENTS и SHOW BINLOG EVENTS. Эта привилегия также необходима для использования опций mysqlbinlog --read-from-remote-server (-R) и --read-from-remote-master. Предоставьте эту привилегию учетным записям, используемым серверами-репликами для подключения к текущему серверу в качестве источника.

  • SELECT

    Позволяет выбирать строки из таблиц в базе данных. Операторы SELECT требуют привилегии SELECT только если они фактически обращаются к таблицам. Некоторые операторы SELECT не обращаются к таблицам и могут быть выполнены без разрешения для любой базы данных. Например, вы можете использовать оператор SELECT в качестве простого калькулятора для вычисления выражений, не ссылающихся на таблицы:

    SELECT 1+1;
    SELECT PI()*2;
    

    Привилегия SELECT также необходима для других операторов, которые считывают значения столбцов. Например, SELECT необходима для столбцов, указанных в правой части выражения col_name=expr присваивания в операторах UPDATE или для столбцов, указанных в разделе WHERE операторов DELETE или UPDATE.

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

  • SHOW DATABASES

    Позволяет учетной записи просматривать имена баз данных, выполняя оператор SHOW DATABASE. Учетные записи, не имеющие этой привилегии, видят только базы данных, для которых они имеют какие-либо привилегии, и не могут использовать оператор вообще, если сервер был запущен с опцией --skip-show-database.

    Внимание

    Поскольку глобальная привилегия считается привилегией для всех баз данных, любая глобальная привилегия позволяет пользователю просматривать все имена баз данных с помощью оператора SHOW DATABASES или путём проверки таблицы INFORMATION_SCHEMA SCHEMATA.

  • SHOW VIEW

    Позволяет использовать оператор SHOW CREATE VIEW. Эта привилегия также необходима для представлений, используемых с EXPLAIN.

  • SHUTDOWN

    Позволяет использовать оператор SHUTDOWN, команду mysqladmin shutdown и функцию C API.

  • SUPER

    Воздействует на следующие операции и поведение сервера:

    • Разрешает изменения конфигурации сервера путём модификации глобальных системных переменных. Для некоторых системных переменных установка значения в сессии также требует привилегии SUPER. Если системная переменная ограничена и требует специальной привилегии для установки значения в сессии, то в описании переменной указывается это ограничение. Примеры включают binlog_format, sql_log_bin и sql_log_off. См. также Раздел 5.1.8.1, «Привилегии системных переменных».

    • Разрешает изменения глобальных характеристик транзакций (см. Раздел 13.3.6, «Оператор SET TRANSACTION»).

    • Разрешает учетной записи запускать и останавливать репликацию, включая Group Replication.

    • Разрешает использование операторов CHANGE MASTER TO и CHANGE REPLICATION FILTER.

    • Разрешает управление бинарным журналом с помощью операторов PURGE BINARY LOGS и BINLOG.

    • Разрешает установку эффективного идентификатора авторизации при выполнении представления или хранимой программы. Пользователь с этой привилегией может указать любую учетную запись в атрибуте DEFINER представления или хранимой программы.

    • Разрешает использование операторов CREATE SERVER, ALTER SERVER и DROP SERVER.

    • Разрешает использование команды mysqladmin debug.

    • Разрешает ротацию ключей шифрования InnoDB.

    • Разрешает чтение файла ключа DES функцией DES_ENCRYPT().

    • Разрешает выполнение функций маркеров версий.

    • Разрешает контроль подключений клиентов, недоступных для учетных записей, не являющихся SUPER:

      • Разрешает использование оператора KILL или команды mysqladmin kill для завершения потоков, принадлежащих другим учетным записям. (Учетная запись всегда может завершить свои собственные потоки.)

      • Сервер не выполняет содержимое системной переменной init_connect при подключении клиентов SUPER.

      • Сервер принимает одно подключение от клиента SUPER, даже если предел подключений, настроенный системной переменной max_connections, достигнут.

      • Сервер в автономном режиме (offline_mode включен) не завершает подключения клиентов SUPER при следующем запросе клиента и принимает новые подключения от клиентов SUPER.

      • Обновления могут выполняться даже при включенной системной переменной read_only. Это относится к явным обновлениям таблиц и к использованию операторов управления учетными записями, таких как GRANT и REVOKE, которые неявно обновляют таблицы.

    Возможно, также потребуется привилегия SUPER для создания или изменения хранимых функций, если включено ведение бинарного журнала, как описано в Разделе 23.7, «Ведение бинарного журнала хранимых программ».

  • TRIGGER

    Разрешает операции с триггерами. Для таблицы необходимо иметь эту привилегию для создания, удаления, выполнения или отображения триггеров для этой таблицы.

    При активации триггера (пользователем, имеющим привилегии для выполнения операторов INSERT, UPDATE или DELETE для таблицы, связанной с триггером), для выполнения триггера необходимо, чтобы пользователь, который определил триггер, по-прежнему имел привилегию TRIGGER для таблицы.

  • UPDATE

    Разрешает обновление строк в таблицах базы данных.

  • USAGE

    Этот спецификатор привилегии означает “нет привилегий.” Он используется на глобальном уровне с GRANT для изменения атрибутов учетной записи, таких как лимиты ресурсов или характеристики SSL, без указания конкретных привилегий учетной записи в списке привилегий. SHOW GRANTS отображает USAGE для указания, что у учетной записи нет привилегий на уровне привилегий.

Рекомендации по предоставлению привилегий

Рекомендуется предоставлять учетной записи только те привилегии, которые ей необходимы. Особое внимание следует уделить предоставлению привилегий FILE и административных привилегий:

  • FILE может быть злоупотреблено для чтения в таблицу базы данных любых файлов, которые MySQL-сервер может прочитать на хосте сервера. Это включает все файлы, читаемые всем, и файлы в каталоге данных сервера. Затем к таблице можно получить доступ с помощью SELECT для передачи ее содержимого на хост клиента.

  • GRANT OPTION позволяет пользователям передавать свои привилегии другим пользователям. Два пользователя с разными привилегиями и привилегией GRANT OPTION могут объединить привилегии.

  • ALTER может использоваться для обхода системы привилегий путём переименования таблиц.

  • SHUTDOWN может быть злоупотреблено для полного отказа в обслуживании других пользователей путём завершения работы сервера.

  • PROCESS может использоваться для просмотра простого текста выполняемых в настоящее время операторов, включая операторы, устанавливающие или изменяющие пароли.

  • SUPER может использоваться для завершения других сессий или изменения работы сервера.

  • Привилегии, предоставленные для самой базы данных системы mysql, могут использоваться для изменения паролей и другой информации о привилегиях доступа:

    • Пароли хранятся зашифрованными, поэтому злоумышленник не может просто прочитать их, чтобы узнать открытый текст пароля. Однако пользователь с правом записи в таблицу системы mysql.user столбец authentication_string может изменить пароль учетной записи и затем подключиться к MySQL-серверу с использованием этой учетной записи.

    • INSERT или UPDATE, предоставленные для базы данных системы mysql, позволяют пользователю соответственно добавлять привилегии или изменять существующие привилегии.

    • DROP для базы данных системы mysql позволяет пользователю удалять таблицы привилегий или даже саму базу данных.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/privileges-provided.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API