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
| Привилегия | Столбец таблицы предоставления | Контекст |
|---|---|---|
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-запросы могут иметь более конкретные требования к привилегиям, чем указано здесь. В этом случае описание соответствующего запроса предоставляет подробную информацию.
-
Эти спецификаторы привилегий являются сокращениями для “всех доступных привилегий на данном уровне” (кроме
GRANT OPTION). Например, предоставлениеALLна глобальном или уровне таблицы предоставляет соответственно все глобальные привилегии или все привилегии на уровне таблицы. -
Разрешает использование запроса
ALTER TABLEдля изменения структуры таблиц.ALTER TABLEтакже требует привилегийCREATEиINSERT. Для переименования таблицы требуетсяALTERиDROPна старой таблице,CREATEиINSERTна новой таблице. -
Разрешает использование запросов, которые изменяют или удаляют хранимые процедуры и функции.
-
Разрешает использование запросов для создания новых баз данных и таблиц.
-
Разрешает использование запросов для создания хранимых процедур и функций.
-
Разрешает использование запросов для создания, изменения или удаления табличных пространств и групп файлов журнала.
-
Разрешает создание временных таблиц с помощью запроса
CREATE TEMPORARY TABLE.После того, как сессия создала временную таблицу, сервер не выполняет дальнейшей проверки привилегий для этой таблицы. Создавшая сессия может выполнять любые операции с таблицей, такие как
DROP TABLE,INSERT,UPDATEилиSELECT. Дополнительную информацию см. в разделе 13.1.18.2, «Запрос CREATE TEMPORARY TABLE». -
Разрешает использование запросов
ALTER USER,CREATE USER,DROP USER,RENAME USERиREVOKE ALL PRIVILEGES. -
Разрешает использование запроса
CREATE VIEW. -
Разрешает удаление строк из таблиц в базе данных.
-
Разрешает использование запросов для удаления (удаления) существующих баз данных, таблиц и представлений. Привилегия
DROPтребуется для использования запросаALTER TABLE ... DROP PARTITIONдля разграниченных таблиц. ПривилегияDROPтакже необходима дляTRUNCATE TABLE. -
Разрешает использование запросов для создания, изменения, удаления или отображения событий для планировщика событий.
-
Разрешает использование запросов для выполнения хранимых процедур и функций.
-
Воздействует на следующие операции и поведение сервера:
Разрешает чтение и запись файлов на хосте сервера с помощью запросов
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, «Системные переменные сервера». -
Разрешает предоставлять или отзывать привилегии другим пользователям, которые у вас есть.
-
Разрешает использование запросов для создания или удаления индексов.
INDEXотносится к существующим таблицам. Если у вас есть привилегияCREATEдля таблицы, вы можете включить определения индексов в запросCREATE TABLE. -
Разрешает вставку строк в таблицы в базе данных.
INSERTтакже требуется для запросовANALYZE TABLE,OPTIMIZE TABLEиREPAIR TABLE. -
Разрешает использование явных запросов
LOCK TABLESдля блокировки таблиц, для которых у вас есть привилегияSELECT. Это включает использование блокировок на запись, которые предотвращают чтение заблокированной таблицы другими сессиями.
-
Привилегия
PROCESSконтролирует доступ к информации о потоках, выполняемых на сервере (то есть, информации о выполняемых запросах сессий). Информация о потоках, доступная с помощью оператораSHOW PROCESSLIST, команды mysqladmin processlist, таблицыINFORMATION_SCHEMA.PROCESSLISTи таблицы Performance Schemaprocesslist, доступна следующим образом:С привилегией
PROCESSпользователь имеет доступ к информации обо всех потоках, даже принадлежащих другим пользователям.Без привилегии
PROCESSнеанонимные пользователи имеют доступ к информации о своих потоках, но не о потоках других пользователей, а анонимные пользователи не имеют доступа к информации о потоках.
ПримечаниеТаблица Performance Schema
threadsтакже предоставляет информацию о потоках, но доступ к таблице использует другую модель привилегий. См. Раздел 25.12.16.4, «Таблица threads».Привилегия
PROCESSтакже позволяет использовать операторSHOW ENGINE, доступ к таблицамINFORMATION_SCHEMAInnoDB(таблицы с именами, начинающимися сINNODB_), и (начиная с MySQL 5.7.31) доступ к таблицеINFORMATION_SCHEMAFILES. -
Позволяет одному пользователю имитировать или стать известным как другой пользователь. См. Раздел 6.2.14, «Пользователи-прокси».
-
Для создания внешнего ключа требуется привилегия
REFERENCESдля родительской таблицы. -
Привилегия
RELOADпозволяет выполнять следующие операции:Использование оператора
FLUSH.-
Использование команд mysqladmin, которые эквивалентны операциям
FLUSH:flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables,flush-threads,refreshиreload.Команда
reloadсообщает серверу перегрузить таблицы разрешений в память.flush-privileges— синоним дляreload. Командаrefreshзакрывает и повторно открывает файлы журналов и очищает все таблицы. Другие командыflush-выполняют функции, аналогичныеxxxrefresh, но более специфичны и могут быть предпочтительнее в некоторых случаях. Например, если нужно очистить только файлы журналов,flush-logs— лучший выбор, чемrefresh. Использование опций mysqldump, которые выполняют различные операции
FLUSH:--flush-logsи--master-data.Использование оператора
RESET.
-
Позволяет использовать операторы
SHOW MASTER STATUS,SHOW SLAVE STATUSиSHOW BINARY LOGS. -
Позволяет учетной записи запрашивать обновления, внесенные в базы данных на сервере-источнике, используя операторы
SHOW SLAVE HOSTS,SHOW RELAYLOG EVENTSиSHOW BINLOG EVENTS. Эта привилегия также необходима для использования опций mysqlbinlog--read-from-remote-server(-R) и--read-from-remote-master. Предоставьте эту привилегию учетным записям, используемым серверами-репликами для подключения к текущему серверу в качестве источника. -
Позволяет выбирать строки из таблиц в базе данных. Операторы
SELECTтребуют привилегииSELECTтолько если они фактически обращаются к таблицам. Некоторые операторыSELECTне обращаются к таблицам и могут быть выполнены без разрешения для любой базы данных. Например, вы можете использовать операторSELECTв качестве простого калькулятора для вычисления выражений, не ссылающихся на таблицы:SELECT 1+1; SELECT PI()*2;
Привилегия
SELECTтакже необходима для других операторов, которые считывают значения столбцов. Например,SELECTнеобходима для столбцов, указанных в правой части выраженияcol_name=exprприсваивания в операторахUPDATEили для столбцов, указанных в разделеWHEREоператоровDELETEилиUPDATE.Привилегия
SELECTнеобходима для таблиц или представлений, используемых сEXPLAIN, включая любые основанные таблицы в определениях представлений. -
Позволяет учетной записи просматривать имена баз данных, выполняя оператор
SHOW DATABASE. Учетные записи, не имеющие этой привилегии, видят только базы данных, для которых они имеют какие-либо привилегии, и не могут использовать оператор вообще, если сервер был запущен с опцией--skip-show-database.ВниманиеПоскольку глобальная привилегия считается привилегией для всех баз данных, любая глобальная привилегия позволяет пользователю просматривать все имена баз данных с помощью оператора
SHOW DATABASESили путём проверки таблицыINFORMATION_SCHEMASCHEMATA. -
Позволяет использовать оператор
SHOW CREATE VIEW. Эта привилегия также необходима для представлений, используемых сEXPLAIN. -
Позволяет использовать оператор
SHUTDOWN, команду mysqladmin shutdown и функцию C API.
-
Воздействует на следующие операции и поведение сервера:
Разрешает изменения конфигурации сервера путём модификации глобальных системных переменных. Для некоторых системных переменных установка значения в сессии также требует привилегии
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, «Ведение бинарного журнала хранимых программ». -
Разрешает операции с триггерами. Для таблицы необходимо иметь эту привилегию для создания, удаления, выполнения или отображения триггеров для этой таблицы.
При активации триггера (пользователем, имеющим привилегии для выполнения операторов
INSERT,UPDATEилиDELETEдля таблицы, связанной с триггером), для выполнения триггера необходимо, чтобы пользователь, который определил триггер, по-прежнему имел привилегиюTRIGGERдля таблицы. -
Разрешает обновление строк в таблицах базы данных.
-
Этот спецификатор привилегии означает “нет привилегий.” Он используется на глобальном уровне с
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.