8.2.2 Предоставляемые привилегии MySQL
Предоставленные привилегии учетной записи MySQL определяют, какие операции может выполнять эта учетная запись. Привилегии MySQL отличаются в контекстах их применения и на различных уровнях работы:
Административные привилегии позволяют пользователям управлять работой сервера MySQL. Эти привилегии являются глобальными, поскольку они не относятся к конкретной базе данных.
Привилегии базы данных применяются к базе данных и всем объектам в ней. Эти привилегии могут быть предоставлены для конкретных баз данных или глобально, чтобы они применялись ко всем базам данных.
Привилегии для объектов базы данных, таких как таблицы, индексы, представления и хранимые процедуры, могут быть предоставлены для конкретных объектов внутри базы данных, для всех объектов данного типа внутри базы данных (например, для всех таблиц в базе данных) или глобально для всех объектов данного типа во всех базах данных.
Привилегии также различаются по своему характеру — статические (встроенные в сервер) или динамические (определяемые во время выполнения). Статический или динамический характер привилегии влияет на возможность их предоставления учетным записям и ролям. Дополнительную информацию о различиях между статическими и динамическими привилегиями см. в разделе Статические и динамические привилегии.
Информация о привилегиях учетной записи хранится в таблицах разрешений в базе данных системы mysql. Подробное описание структуры и содержимого этих таблиц см. в разделе разделе 8.2.3, «Таблицы разрешений». При запуске сервер MySQL считывает содержимое таблиц разрешений в оперативную память и перезагружает их в указанных в разделе 8.2.13, «Когда вступают в силу изменения привилегий» условиях. Решения о контроле доступа сервер основывает на копиях таблиц разрешений в оперативной памяти.
Некоторые версии MySQL вносят изменения в таблицы разрешений, добавляя новые привилегии или функции. Чтобы использовать новые возможности, обновляйте таблицы разрешений до текущей структуры при каждом обновлении MySQL. См. главу 3, «Обновление MySQL».
В следующих разделах подводится итог доступных привилегий, даются более подробные описания каждой привилегии и приводятся рекомендации по их использованию.
Обзор доступных привилегий
В следующей таблице показаны имена статических привилегий, используемые в операциях GRANT и REVOKE, вместе с именем столбца в таблицах разрешений, связанным с каждой привилегией, и контекстом, в котором применяется эта привилегия.
Таблица 8.2 Разрешенные статические привилегии для GRANT и REVOKE
| Привилегия | Столбец таблицы разрешений | Контекст |
|---|---|---|
ALL [PRIVILEGES] | Синоним для “все привилегии” | Администрирование сервера |
ALTER | Alter_priv | Таблицы |
ALTER ROUTINE | Alter_routine_priv | Хранимые процедуры |
CREATE | Create_priv | Базы данных, таблицы или индексы |
CREATE ROLE | Create_role_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 | Базы данных, таблицы или представления |
DROP ROLE | Drop_role_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 | Синоним для “без привилегий” | Администрирование сервера |
В следующей таблице показаны имена динамических привилегий, используемые в операциях GRANT и REVOKE, вместе с контекстом, в котором применяется каждая привилегия.
Таблица 8.3 Разрешенные динамические привилегии для GRANT и REVOKE
| Привилегия | Контекст |
|---|---|
ALLOW_NONEXISTENT_DEFINER | Защита от объектов-сирот |
APPLICATION_PASSWORD_ADMIN | Управление паролями приложений |
AUDIT_ABORT_EXEMPT | Разрешить запросы, заблокированные фильтром журнала аудита |
AUDIT_ADMIN | Управление журналом аудита |
AUTHENTICATION_POLICY_ADMIN | Управление аутентификацией |
BACKUP_ADMIN | Управление резервными копированиями |
BINLOG_ADMIN | Управление резервными копиями и репликацией |
BINLOG_ENCRYPTION_ADMIN | Управление резервными копиями и репликацией |
CLONE_ADMIN | Управление клонированием |
CONNECTION_ADMIN | Управление сервером |
CREATE_SPATIAL_REFERENCE_SYSTEM | Управление ГИС |
ENCRYPTION_KEY_ADMIN | Управление сервером |
EXPORT_QUERY_RESULTS | Разрешить пользователю экспортировать результаты запроса |
FIREWALL_ADMIN | Управление брандмауэром |
FIREWALL_EXEMPT | Управление брандмауэром |
FIREWALL_USER | Управление брандмауэром |
FLUSH_OPTIMIZER_COSTS | Управление сервером |
FLUSH_PRIVILEGES (Устарело) | Управление сервером |
FLUSH_STATUS | Управление сервером |
FLUSH_TABLES | Управление сервером |
FLUSH_USER_RESOURCES | Управление сервером |
GROUP_REPLICATION_ADMIN | Управление репликацией |
GROUP_REPLICATION_STREAM | Управление репликацией |
INNODB_REDO_LOG_ARCHIVE | Управление архивированием журнала редо |
INNODB_REDO_LOG_ENABLE | Управление журналом редо |
MASKING_DICTIONARIES_ADMIN | Управление сервером |
NDB_STORED_USER | Кластер NDB |
OPTIMIZE_LOCAL_TABLE |
OPTIMIZE LOCAL
TABLE |
OPTION_TRACKER_UPDATER | Доступ для записи в таблицу Option Tracker mysql_option.option_usage |
PASSWORDLESS_USER_ADMIN | Управление аутентификацией |
PERSIST_RO_VARIABLES_ADMIN | Управление сервером |
REPLICATION_APPLIER |
PRIVILEGE_CHECKS_USER для канала репликации |
REPLICATION_SLAVE_ADMIN | Управление репликацией |
RESOURCE_GROUP_ADMIN | Управление группой ресурсов |
RESOURCE_GROUP_USER | Управление группой ресурсов |
ROLE_ADMIN | Управление сервером |
SENSITIVE_VARIABLES_OBSERVER | Управление сервером |
SESSION_VARIABLES_ADMIN | Управление сервером |
SET_ANY_DEFINER | Управление сервером |
SHOW_ROUTINE | Управление сервером |
SKIP_QUERY_REWRITE | Управление сервером |
SYSTEM_USER | Управление сервером |
SYSTEM_VARIABLES_ADMIN | Управление сервером |
TABLE_ENCRYPTION_ADMIN | Управление сервером |
TELEMETRY_LOG_ADMIN | Управление журналом телеметрии для HeatWave на AWS |
TP_CONNECTION_ADMIN | Управление пулом потоков |
TRANSACTION_GTID_TAG | Управление репликацией |
VERSION_TOKEN_ADMIN (Устарело) | Управление сервером |
XA_RECOVER_ADMIN | Управление сервером |
Статические описания привилегий
Статические привилегии встроены в сервер, в отличие от динамических привилегий, которые определяются во время выполнения. В приведенном ниже списке описывается каждая доступная статическая привилегия в MySQL.
Определенные SQL-команды могут иметь более конкретные требования к привилегиям, чем указано здесь. В таком случае подробные сведения содержатся в описании соответствующей команды.
-
Эти спецификаторы привилегий являются сокращением для “всех привилегий, доступных на данном уровне привилегий” (за исключением
GRANT OPTION). Например, предоставлениеALLна глобальном или табличном уровне предоставляет все глобальные привилегии или все привилегии уровня таблицы соответственно. -
Позволяет использовать оператор
ALTER TABLEдля изменения структуры таблиц.ALTER TABLEтакже требует привилегийCREATEиINSERT. Переименование таблицы требуетALTERиDROPдля старой таблицы,CREATEиINSERTдля новой таблицы. -
Позволяет использовать операторы, которые изменяют или удаляют хранимые процедуры (хранимые процедуры и функции). Для процедур, которые попадают в область действия, в которой предоставлена привилегия, и для которых пользователь не является пользователем, указанным в качестве владельца процедуры
DEFINER, также обеспечивает доступ к свойствам процедуры, отличным от определения процедуры. -
Позволяет использовать операторы, которые создают новые базы данных и таблицы.
-
Позволяет использовать оператор
CREATE ROLE. (ПривилегияCREATE USERтакже позволяет использовать операторCREATE ROLE.) См. Раздел 8.2.10, «Использование ролей».Привилегии
CREATE ROLEиDROP ROLEне так сильны, какCREATE USER, поскольку они могут использоваться только для создания и удаления учетных записей. Их нельзя использовать так, какCREATE USER, чтобы изменять атрибуты учетной записи или переименовывать учетные записи. См. Взаимозаменяемость пользователей и ролей. -
Позволяет использовать операторы, которые создают хранимые процедуры (хранимые процедуры и функции). Для процедур, которые попадают в область действия, в которой предоставлена привилегия, и для которых пользователь не является пользователем, указанным в качестве владельца процедуры
DEFINER, также обеспечивает доступ к свойствам процедуры, отличным от определения процедуры. -
Позволяет использовать операторы, которые создают, изменяют или удаляют табличные пространства и группы файлов журналов.
-
Позволяет создавать временные таблицы с помощью оператора
CREATE TEMPORARY TABLE.После того, как сеанс создал временную таблицу, сервер больше не выполняет проверку привилегий для таблицы. Создающий сеанс может выполнять любую операцию с таблицей, например
DROP TABLE,INSERT,UPDATEилиSELECT. Для получения дополнительной информации см. Раздел 15.1.21.2, «Оператор CREATE TEMPORARY TABLE». -
Позволяет использовать операторы
ALTER USER,CREATE ROLE,CREATE USER,DROP ROLE,DROP USER,RENAME USERиREVOKE ALL PRIVILEGES. -
Позволяет использовать оператор
CREATE VIEW. -
Позволяет удалять строки из таблиц в базе данных.
-
Позволяет использовать операторы, которые удаляют (удаляют) существующие базы данных, таблицы и представления. Привилегия
DROPнеобходима для использования оператораALTER TABLE ... DROP PARTITIONдля секционированной таблицы. ПривилегияDROPтакже необходима дляTRUNCATE TABLE. -
Позволяет использовать оператор
DROP ROLE. (ПривилегияCREATE USERтакже позволяет использовать операторDROP ROLE.) См. Раздел 8.2.10, «Использование ролей».Привилегии
CREATE ROLEиDROP ROLEне так сильны, какCREATE USER, поскольку они могут использоваться только для создания и удаления учетных записей. Их нельзя использовать так, какCREATE USER, чтобы изменять атрибуты учетной записи или переименовывать учетные записи. См. Взаимозаменяемость пользователей и ролей. -
Позволяет использовать операторы, которые создают, изменяют, удаляют или отображают события для Планировщика событий.
-
Позволяет использовать операторы, которые выполняют хранимые процедуры (хранимые процедуры и функции). Для процедур, которые попадают в область действия, в которой предоставлена привилегия, и для которых пользователь не является пользователем, указанным в качестве владельца процедуры
DEFINER, также обеспечивает доступ к свойствам процедуры, отличным от определения процедуры. -
Влияет на следующие операции и поведение сервера:
Позволяет читать и записывать файлы на хосте сервера с использованием операторов
LOAD DATAиSELECT ... INTO OUTFILEи функцииLOAD_FILE(). Пользователь, имеющий привилегиюFILE, может читать любой файл на хосте сервера, который является общедоступным для чтения или доступным для чтения сервером MySQL. (Это подразумевает, что пользователь может читать любой файл в любом каталоге базы данных, поскольку сервер может получить доступ к любому из этих файлов.)Позволяет создавать новые файлы в любом каталоге, к которому сервер MySQL имеет доступ на запись. Это включает в себя каталог данных сервера, содержащий файлы, которые реализуют таблицы привилегий.
Позволяет использовать параметр таблицы
DATA DIRECTORYилиINDEX DIRECTORYдля оператораCREATE TABLE.
В качестве меры безопасности сервер не перезаписывает существующие файлы.
Чтобы ограничить местоположение, в котором можно читать и записывать файлы, установите системную переменную
secure_file_privв определенный каталог. См. Раздел 7.1.8, «Системные переменные сервера». -
Позволяет предоставлять или отзывать у других пользователей те привилегии, которыми вы сами обладаете.
-
Разрешает использование операторов, создающих или удаляющих индексы. Привилегия
INDEXприменяется к существующим таблицам. Если у вас есть привилегияCREATEдля таблицы, вы можете включить определения индексов в оператореCREATE TABLE. -
Разрешает вставку строк в таблицы базы данных. Привилегия
INSERTтакже требуется для операторов обслуживания таблицANALYZE TABLE,OPTIMIZE TABLEиREPAIR TABLE. -
Разрешает использование явных операторов
LOCK TABLESдля блокировки таблиц, для которых у вас есть привилегияSELECT. Это включает использование блокировок на запись, которые предотвращают чтение заблокированной таблицы другими сеансами. -
Привилегия доступа к информации о потоках
Привилегия
PROCESSконтролирует доступ к информации о потоках, выполняемых внутри сервера (т.е. информацию о выполняемых операторах сеансами). Информация о потоках, доступная с помощью оператораSHOW PROCESSLIST, команды mysqladmin processlist, таблицы схемы информацииPROCESSLISTи таблицы схемы производительностиprocesslist, доступна следующим образом:При наличии привилегии
PROCESSпользователь имеет доступ к информации обо всех потоках, даже принадлежащих другим пользователям.Без привилегии
PROCESSнеанонимные пользователи имеют доступ к информации о своих потоках, но не о потоках других пользователей, а анонимные пользователи не имеют доступа к информации о потоках.
ПримечаниеТаблица схемы производительности
threadsтакже предоставляет информацию о потоках, но доступ к таблицам использует другую модель привилегий. См. Раздел 29.12.22.9, «Таблица threads».Привилегия
PROCESSтакже разрешает использование оператораSHOW ENGINE, доступ к таблицамINFORMATION_SCHEMAInnoDB(таблицам с именами, начинающимися сINNODB_) и доступ к таблицеINFORMATION_SCHEMAFILES. -
Разрешает одному пользователю представлять или быть известным как другой пользователь. См. Раздел 8.2.19, «Пользователи-прокси».
-
Для создания внешнего ключа требуется привилегия
REFERENCESдля родительской таблицы. -
Привилегия
RELOADразрешает следующие операции:Использование оператора
FLUSH.-
Использование команд mysqladmin, эквивалентных операциям
FLUSH:flush-hosts,flush-logs,flush-privileges,flush-status,flush-tables,refreshиreload.Команда
reloadзаставляет сервер перезагрузить таблицы разрешений в памяти.flush-privileges— синонимreload. Командаrefreshзакрывает и повторно открывает файлы журналов и выполняет сброс всех таблиц. Другие командыflush-выполняют функции, аналогичныеxxxrefresh, но более специфичны и могут быть предпочтительнее в некоторых случаях. Например, если вы хотите сбросить только файлы журналов,flush-logs— лучший выбор, чемrefresh. Использование опций mysqldump, выполняющих различные операции
FLUSH:--flush-logsи--source-data.Использование операторов
RESET BINARY LOGS AND GTIDSиRESET REPLICA.
-
Разрешает использование операторов
SHOW BINARY LOG STATUS,SHOW REPLICA STATUSиSHOW BINARY LOGS. -
Разрешает учетной записи запрашивать обновления, внесённые в базы данных на сервере репликации, с помощью операторов
SHOW REPLICAS,SHOW RELAYLOG EVENTSиSHOW BINLOG EVENTS. Эта привилегия также необходима для использования опций mysqlbinlog--read-from-remote-server(-R) и--read-from-remote-source. Предоставьте эту привилегию учётным записям, используемым репликами для подключения к текущему серверу в качестве их сервера репликации. -
Разрешает выбор строк из таблиц базы данных. Операторы
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или путем проверки таблицыSCHEMATAтаблицыINFORMATION_SCHEMA, за исключением баз данных, которые были ограничены на уровне базы данных частичными отзывами прав. -
Разрешает использование операции
SHOW CREATE VIEW. Это право также необходимо для представлений, используемых сEXPLAIN. -
Разрешает использование операций
SHUTDOWNиRESTART, команду mysqladmin shutdown и функцию C API. -
SUPER— это мощное и широкодействующее право, которое не следует предоставлять легкомысленно. Если учетной записи требуется выполнить только подмножество операцийSUPER, возможно, можно получить желаемый набор прав, предоставив одно или несколько динамических прав, каждое из которых предоставляет более ограниченные возможности. См. Описание динамических прав.ПримечаниеSUPERустарело и ожидается, что оно будет удалено в будущих версиях MySQL. См. Перенос учетных записей с SUPER на динамические права.SUPERвлияет на следующие операции и поведение сервера:-
Разрешает изменения переменных системы во время выполнения:
-
Разрешает изменения конфигурации сервера для глобальных системных переменных с помощью
SET GLOBALиSET PERSIST.Соответствующее динамическое право —
SYSTEM_VARIABLES_ADMIN. -
Разрешает установку ограниченных сеансовых системных переменных, требующих специального права.
Соответствующее динамическое право —
SESSION_VARIABLES_ADMIN.
-
-
Разрешает изменения глобальных характеристик транзакций (см. Раздел 15.3.7, «Операция SET TRANSACTION»).
Соответствующее динамическое право —
SYSTEM_VARIABLES_ADMIN. -
Разрешает учетной записи запускать и останавливать репликацию, включая Group Replication.
Соответствующее динамическое право —
REPLICATION_SLAVE_ADMINдля обычной репликации,GROUP_REPLICATION_ADMINдля Group Replication. -
Разрешает использовать операцию
CHANGE REPLICATION SOURCE TOиCHANGE REPLICATION FILTER.Соответствующее динамическое право —
REPLICATION_SLAVE_ADMIN. -
Разрешает управление бинарными логами с помощью операций
PURGE BINARY LOGSиBINLOG.Соответствующее динамическое право —
BINLOG_ADMIN. -
Разрешает установить действительный идентификатор авторизации при выполнении представления или хранимой программы. Пользователь с этим правом может указать любую учетную запись в атрибуте
DEFINERпредставления или хранимой программы.Соответствующие динамические права —
SET_ANY_DEFINERиALLOW_NONEXISTENT_DEFINER. Разрешает использование операций
CREATE SERVER,ALTER SERVERиDROP SERVER.Разрешает использование команды mysqladmin debug.
-
Разрешает вращение ключей шифрования
InnoDB.Соответствующее динамическое право —
ENCRYPTION_KEY_ADMIN. -
Разрешает выполнение устаревших функций Version Tokens.
Соответствующее динамическое право —
VERSION_TOKEN_ADMIN, которое устарело в MySQL 9.2.0. -
Разрешает назначение и отзыв ролей, использование фразы
WITH ADMIN OPTIONоператораGRANTи непустое содержание элемента<graphml>в результате работы функцииROLES_GRAPHML().Соответствующее динамическое право —
ROLE_ADMIN. -
Разрешает контроль над клиентскими подключениями, запрещенными для учетных записей, не имеющих права
SUPER:Разрешает использование операции
KILLили команды mysqladmin kill для завершения потоков, принадлежащих другим учетным записям. (Учетная запись всегда может завершать свои собственные потоки.)Сервер не выполняет содержимое системной переменной
init_connectпри подключении клиентов с правомSUPER.Сервер принимает одно подключение от клиента с правом
SUPER, даже если предел подключений, настроенный системной переменнойmax_connections, достигнут.Сервер в режиме автономного режима (
offline_modeвключен) не завершает подключения клиентов с правомSUPERпри следующем запросе клиента и принимает новые подключения от клиентов с правомSUPER.Обновления могут выполняться даже при включении системной переменной
read_only. Это относится к явным обновлениям таблиц и к использованию операторов управления учетными записями, таких какGRANTиREVOKE, которые неявно обновляют таблицы.
Соответствующее динамическое право для предыдущих операций управления подключениями —
CONNECTION_ADMIN.
Вам также может потребоваться право
SUPERдля создания или изменения хранимых функций, если включена запись в бинарный журнал, как описано в Разделе 27.8, «Логирование хранимых программ в бинарном формате». -
-
Включает операции триггеров. Для создания, удаления, выполнения или отображения триггеров для данной таблицы необходимо иметь это право.
Когда триггер активируется (пользователем, имеющим права на выполнение инструкций
INSERT,UPDATEилиDELETEдля таблицы, связанной с триггером), для выполнения триггера требуется, чтобы пользователь, определивший триггер, по-прежнему имел правоTRIGGERдля таблицы. -
Позволяет обновлять строки в таблицах базы данных.
-
Этот спецификатор привилегий означает “отсутствие прав.” Он используется на глобальном уровне с
GRANTдля указания таких разделов, какWITH GRANT OPTION, без указания конкретных прав учетной записи в списке прав.SHOW GRANTSотображаетUSAGE, чтобы указать, что учетная запись не имеет прав на определенном уровне прав.
Описания динамических привилегий
Динамические привилегии определяются во время выполнения, в отличие от статических привилегий, которые встроены в сервер. В следующем списке описывается каждая динамическая привилегия, доступная в MySQL.
Большинство динамических привилегий определяются при запуске сервера. Другие определяются конкретным компонентом или плагином, как указано в описаниях привилегий. В таких случаях привилегия недоступна, если компонент или плагин, который ее определяет, не включен.
Конкретные операторы SQL могут иметь более специфические требования к привилегиям, чем указано здесь. Если это так, описание соответствующего оператора содержит подробные сведения.
-
Позволяет переопределять проверки безопасности, предназначенные для предотвращения операций, которые (возможно, непреднамеренно) приводят к тому, что хранимые объекты становятся осиротевшими или приводят к усыновлению хранимых объектов, которые в настоящее время являются осиротевшими. Без этой привилегии любая попытка создать осиротевшую SQL-процедуру, функцию или представление приводит к ошибке. Попытка создать осиротевшие объекты с помощью
CREATE PROCEDURE,CREATE FUNCTION,CREATE TRIGGER,CREATE EVENTилиCREATE VIEWтакже требуетSET_ANY_DEFINERв дополнение кALLOW_NONEXISTENT_DEFINER, так что определяющий элемент, отличный от текущего пользователя, допустим.Подробнее см. Осиротевшие хранимые объекты.
-
Для возможности двойного пароля эта привилегия позволяет использовать разделы
RETAIN CURRENT PASSWORDиDISCARD OLD PASSWORDдля операторовALTER USERиSET PASSWORD, которые применяются к вашей собственной учетной записи. Эта привилегия необходима для управления собственным вторичным паролем, поскольку большинству пользователей требуется только один пароль.Если учетной записи разрешено управлять вторичными паролями для всех учетных записей, ей следует предоставить привилегию
CREATE USER, а неAPPLICATION_PASSWORD_ADMIN.Для получения дополнительной информации об использовании двойных паролей см. Раздел 8.2.15, «Управление паролями».
-
Позволяет выполнять запросы, блокируемые элементом “abort” в фильтре журнала аудита. Эта привилегия определяется плагином
audit_log; см. Раздел 8.4.5, «Аудит MySQL Enterprise».Учетные записи, созданные с привилегией
SYSTEM_USER, автоматически получают привилегиюAUDIT_ABORT_EXEMPTпри создании. ПривилегияAUDIT_ABORT_EXEMPTтакже назначается существующим учетным записям с привилегиейSYSTEM_USERпри выполнении процедуры обновления, если ни одна из существующих учетных записей не имеет этой привилегии. Таким образом, учетные записи с привилегиейSYSTEM_USERмогут использоваться для восстановления доступа к системе после неправильной настройки аудита. -
Включает конфигурацию журнала аудита. Эта привилегия определяется плагином
audit_log; см. Раздел 8.4.5, «Аудит MySQL Enterprise». -
Включает выполнение оператора
LOCK INSTANCE FOR BACKUPи доступ к таблицеlog_statusсхемы производительности.ПримечаниеПомимо
BACKUP_ADMIN, для доступа к ней также необходима привилегияSELECTдля таблицыlog_status.Привилегия
BACKUP_ADMINавтоматически предоставляется пользователям с привилегиейRELOADпри выполнении обновления на месте до MySQL 9.2 из более ранней версии. -
Системная переменная
authentication_policyнакладывает определенные ограничения на то, как могут использоваться разделы, связанные с аутентификацией, операторовCREATE USERиALTER USER. Пользователь, имеющий привилегиюAUTHENTICATION_POLICY_ADMIN, не подчиняется этим ограничениям. (Предупреждение возникает для операторов, которые в противном случае не были бы разрешены.)Подробные сведения об ограничениях, налагаемых
authentication_policy, см. в описании этой переменной. -
Включает управление двоичным журналом с помощью операторов
PURGE BINARY LOGSиBINLOG. -
Позволяет устанавливать системную переменную
binlog_encryption, которая активирует или деактивирует шифрование для файлов двоичных журналов и файлов журналов ретрансляции. Эта возможность не предоставляется привилегиямиBINLOG_ADMIN,SYSTEM_VARIABLES_ADMINилиSESSION_VARIABLES_ADMIN. Для связанной системной переменнойbinlog_rotate_encryption_master_key_at_startup, которая автоматически поворачивает главный ключ двоичного журнала при перезапуске сервера, эта привилегия не требуется. -
Включает выполнение операторов
CLONE. Включает привилегииBACKUP_ADMINиSHUTDOWN.
-
Разрешает использование оператора
KILLили команды mysqladmin kill для завершения потоков, принадлежащих другим учётным записям. (Учётная запись всегда может завершать свои собственные потоки.)Разрешает установку системных переменных, связанных с клиентскими подключениями, или обход ограничений, связанных с клиентскими подключениями. Для активации автономного режима MySQL Server требуется
CONNECTION_ADMIN, что выполняется путём изменения значения системной переменнойoffline_modeнаON.Привилегия
CONNECTION_ADMINпозволяет администраторам, обладающим ею, обойти действие этих системных переменных:init_connect: сервер не выполняет содержимое системной переменнойinit_connectпри подключении клиентов с привилегиейCONNECTION_ADMIN.max_connections: сервер принимает одно подключение от клиента с привилегиейCONNECTION_ADMIN, даже если предел подключений, настроенный системной переменнойmax_connections, достигнут.offline_mode: сервер в автономном режиме (offline_modeвключен) не завершает подключения клиентов с привилегиейCONNECTION_ADMINпри следующем запросе клиента и принимает новые подключения от клиентов с привилегиейCONNECTION_ADMIN.read_only: обновления от клиентов с привилегиейCONNECTION_ADMINмогут выполняться даже при включении системной переменнойread_only. Это относится к явным обновлениям таблиц и к операторам управления учётными записями, таким какGRANTиREVOKE, которые неявно обновляют таблицы.
Члены группы репликации Group Replication нуждаются в привилегии
CONNECTION_ADMIN, чтобы подключения Group Replication не завершались, если один из участвующих серверов переведён в автономный режим. Если используется стек MySQL-связи (group_replication_communication_stack = MYSQL), без этой привилегии участник, переведённый в автономный режим, исключается из группы. -
CREATE_SPATIAL_REFERENCE_SYSTEMРазрешает использование операторов
CREATE SPATIAL REFERENCE SYSTEM,CREATE OR REPLACE SPATIAL REFERENCE SYSTEMиDROP SPATIAL REFERENCE SYSTEM. Попытка выполнить любой из этих операторов без этой привилегии (или привилегииSUPER) теперь вызывает ошибку.Добавлено в MySQL 9.2.0; использование этой привилегии предназначено для замены использования привилегии
SUPERв этих целях, которое следует считать устаревшим. -
Разрешает
InnoDBвращение ключей шифрования. -
Разрешает пользователю экспортировать результаты запросов в хранилище объектов OCI или AWS.
Применимо только к MySQL HeatWave.
-
Разрешает пользователю управлять правилами брандмауэра для любого пользователя. Эта привилегия определена плагином
MYSQL_FIREWALL; см. Раздел 8.4.7, «MySQL Enterprise Firewall». -
Пользователь с этой привилегией освобождён от ограничений брандмауэра. Эта привилегия определена плагином
MYSQL_FIREWALL; см. Раздел 8.4.7, «MySQL Enterprise Firewall». -
Разрешает пользователям обновлять свои собственные правила брандмауэра. Эта привилегия определена плагином
MYSQL_FIREWALL; см. Раздел 8.4.7, «MySQL Enterprise Firewall». -
Разрешает использование оператора
FLUSH OPTIMIZER_COSTS. -
Разрешает использование оператора
FLUSH PRIVILEGES.Устарело начиная с MySQL 9.2.0, наряду с оператором
FLUSH PRIVILEGES; ожидается, что эта привилегия будет удалена в будущей версии MySQL. В MySQL 9.2.0 и более поздних версиях предоставление привилегииFLUSH_PRIVILEGESвызывает предупреждение об устаревании. -
Разрешает использование оператора
FLUSH STATUS. -
Разрешает использование оператора
FLUSH TABLES. -
Разрешает использование оператора
FLUSH USER_RESOURCES. -
Разрешает учётной записи запускать и останавливать Group Replication с помощью операторов
START GROUP REPLICATIONиSTOP GROUP REPLICATION, изменять глобальную настройку системной переменнойgroup_replication_consistencyи использовать функцииgroup_replication_set_write_concurrency()иgroup_replication_set_communication_protocol(). Предоставьте эту привилегию учётным записям, используемым для администрирования серверов, которые являются членами группы репликации. -
Разрешает использовать учётную запись для установления соединений групповой связи Group Replication. Она должна быть предоставлена пользователю восстановления, когда для Group Replication используется стек MySQL-связи (
group_replication_communication_stack=MYSQL). -
Разрешает учётной записи активировать и деактивировать архивирование журнала redo.
-
Разрешает использование оператора
ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOGдля включения или отключения журналирования redo. -
Разрешает учётной записи добавлять и удалять термины словаря с помощью компонентных функций
masking_dictionary_term_add()иmasking_dictionary_term_remove(). Учётные записи также требуют этой динамической привилегии для удаления полного словаря с помощью функцииmasking_dictionary_remove(), которая удаляет все термины, связанные с указанным словарем, в настоящее время в таблицеmysql.masking_dictionaries.См. Раздел 8.5, «MySQL Enterprise Data Masking and De-Identification».
-
Позволяет совместно использовать и синхронизировать пользователя или роль и связанные с ними привилегии между всеми серверами MySQL с поддержкой
NDB, как только они присоединяются к данному кластеру NDB. Эта привилегия доступна только в том случае, если включен механизм храненияNDB.Любые изменения или отмены привилегий, внесенные для данного пользователя или роли, немедленно синхронизируются со всеми подключенными серверами MySQL (SQL-узлами). Следует помнить, что нет гарантии, что несколько операторов, влияющих на привилегии и исходящих от разных SQL-узлов, выполняются на всех SQL-узлах в одном и том же порядке. По этой причине настоятельно рекомендуется выполнять все операции администрирования пользователей с одного назначенного SQL-узла.
NDB_STORED_USERявляется глобальной привилегией и должна предоставляться или отзываться с использованиемON *.*. Попытка установить любой другой диапазон для этой привилегии приводит к ошибке. Эта привилегия может быть предоставлена большинству пользователей приложений и администраторов, но она не может быть предоставлена зарезервированным системным учетным записям, таким какmysql.session@localhostилиmysql.infoschema@localhost.Пользователь, которому предоставлена привилегия
NDB_STORED_USER, хранится вNDB(и, таким образом, совместно используется всеми SQL-узлами), как и роль с этой привилегией. Пользователь, которому просто предоставлена роль, имеющаяNDB_STORED_USER, не хранится вNDB; каждому хранимому пользователюNDBнеобходимо явно предоставить привилегию.Для получения более подробной информации о том, как это работает в
NDB, см. Раздел 25.6.13, «Синхронизация привилегий и NDB_STORED_USER». -
Позволяет использовать операторы
OPTIMIZE LOCAL TABLEиOPTIMIZE NO_WRITE_TO_BINLOG TABLE. -
Эта привилегия необходима для записи в таблицу
mysql_option.option_usage; как привилегия, так и таблица предоставляются компонентом Option Tracker. Для получения дополнительной информации см. Раздел 7.5.9, «Компонент Option Tracker». -
Эта привилегия применяется к учетным записям пользователей без пароля:
Для создания учетной записи пользователь, который выполняет команду
CREATE USERдля создания учетной записи без пароля, должен обладать привилегиейPASSWORDLESS_USER_ADMIN.В контексте репликации привилегия
PASSWORDLESS_USER_ADMINприменяется к пользователям репликации и позволяет реплицировать операторыALTER USER ... MODIFYдля учетных записей пользователей, настроенных для аутентификации без пароля.
Информация об аутентификации без пароля см. Аутентификация без пароля WebAuthn.
-
Для пользователей, которые также имеют
SYSTEM_VARIABLES_ADMIN,PERSIST_RO_VARIABLES_ADMINпозволяет использоватьSET PERSIST_ONLYдля сохранения глобальных системных переменных в файл опцийmysqld-auto.cnfв каталоге данных. Этот оператор похож наSET PERSIST, но не изменяет значение глобальной системной переменной во время выполнения. Это делаетSET PERSIST_ONLYподходящим для настройки системных переменных только для чтения, которые могут быть установлены только при запуске сервера.См. также Раздел 7.1.9.1, «Привилегии системных переменных».
-
Позволяет учетной записи выступать в качестве
PRIVILEGE_CHECKS_USERдля канала репликации и выполнять операторыBINLOGв выводе mysqlbinlog. Предоставьте эту привилегию учетным записям, которые назначены с помощьюCHANGE REPLICATION SOURCE TO, чтобы обеспечить контекст безопасности для каналов репликации и обрабатывать ошибки репликации на этих каналах. Помимо привилегииREPLICATION_APPLIER, вы также должны предоставить учетной записи необходимые привилегии для выполнения транзакций, полученных каналом репликации или содержащихся в выводе mysqlbinlog, например, для обновления затронутых таблиц. Для получения дополнительной информации см. Раздел 19.3.3, «Проверка привилегий репликации». -
Позволяет учетной записи подключаться к серверу источника репликации, запускать и останавливать репликацию с помощью операторов
START REPLICAиSTOP REPLICA, а также использовать операторыCHANGE REPLICATION SOURCE TOиCHANGE REPLICATION FILTER. Предоставьте эту привилегию учетным записям, используемым репликами для подключения к текущему серверу в качестве сервера источника репликации. Эта привилегия не применяется к групповой репликации; используйтеGROUP_REPLICATION_ADMINдля этого. -
Позволяет управлять группами ресурсов, включая создание, изменение и удаление групп ресурсов, а также назначение потоков и операторов группам ресурсов. Пользователь с этой привилегией может выполнять любые операции, связанные с группами ресурсов.
-
Позволяет назначать потоки и операторы группам ресурсов. Пользователь с этой привилегией может использовать оператор
SET RESOURCE GROUPи подсказку оптимизатораRESOURCE_GROUP. -
Позволяет предоставлять и отзывать роли, использовать предложение
WITH ADMIN OPTIONоператораGRANTи непустое содержимое элемента<graphml>в результате работы функцииROLES_GRAPHML(). Необходимо для установки значения системной переменнойmandatory_roles. -
Позволяет владельцу просматривать значения конфиденциальных системных переменных в таблицах Performance Schema
global_variables,session_variables,variables_by_threadиpersisted_variables, для выдачи операторовSELECTдля возврата их значений и отслеживания изменений в них в средствах отслеживания сеансов для подключений. Пользователи без этой привилегии не могут просматривать или отслеживать эти значения системных переменных. См. Сохранение конфиденциальных системных переменных. -
Позволяет подключения к сетевому интерфейсу, который разрешает только административные подключения (см. Раздел 7.1.12.1, «Интерфейсы подключения»).
-
Для большинства системных переменных установка значения сессии не требует специальных привилегий и может быть выполнена любым пользователем для текущей сессии. Для некоторых системных переменных установка значения сессии может иметь последствия за пределами текущей сессии и, следовательно, является ограниченной операцией. Для них привилегия
SESSION_VARIABLES_ADMINпозволяет пользователю установить значение сессии.Если системная переменная ограничена и для установки значения сессии требуется специальная привилегия, то это ограничение указано в описании переменной. Примерами являются
binlog_format,sql_log_binиsql_log_off.Привилегия
SESSION_VARIABLES_ADMINявляется подмножеством привилегийSYSTEM_VARIABLES_ADMINиSUPER. Пользователь, обладающий любой из этих привилегий, также имеет право устанавливать ограниченные переменные сессии и, по умолчанию, обладает привилегиейSESSION_VARIABLES_ADMIN, и ему не нужно явно предоставлять привилегиюSESSION_VARIABLES_ADMIN.См. также Раздел 7.1.9.1, «Привилегии системных переменных».
-
Позволяет установить эффективный идентификатор авторизации при выполнении представления или хранимой процедуры. Пользователь с этой привилегией может указать любой аккаунт как атрибут
DEFINERдляCREATE PROCEDURE,CREATE FUNCTION,CREATE TRIGGER,CREATE EVENT,ALTER EVENT,CREATE VIEWиALTER VIEW. Без этой привилегии можно указать только эффективный идентификатор аутентификации.Хранимые программы выполняются с привилегиями указанного аккаунта, поэтому убедитесь, что вы следуете рекомендациям по минимизации рисков, перечисленным в Разделе 27.7, «Управление доступом к хранимым объектам».
-
Позволяет пользователю получить доступ к определениям и свойствам всех хранимых процедур (хранимых процедур и функций), даже тех, для которых пользователь не указан как автор хранимой процедуры. Этот доступ включает в себя:
Содержимое таблицы схемы Information Schema
ROUTINES.Команды
SHOW CREATE FUNCTIONиSHOW CREATE PROCEDURE.Команды
SHOW FUNCTION CODEиSHOW PROCEDURE CODE.Команды
SHOW FUNCTION STATUSиSHOW PROCEDURE STATUS.
Привилегия
SHOW_ROUTINEможет быть предоставлена вместо привилегии с более ограниченным объемом, разрешающей доступ к определениям процедур. (То есть администратор может отозвать глобальную привилегиюSELECTу пользователей, которым она не требуется, и предоставить вместо этого привилегиюSHOW_ROUTINE). Это позволяет аккаунту создавать резервные копии хранимых процедур без необходимости широких привилегий. -
Запросы, выпущенные пользователем с этой привилегией, не будут переписываться плагином
Rewriter(см. Раздел 7.6.4, «Плагин переписывания запросов Rewriter»).Эту привилегию следует предоставлять пользователям, которые выпускают административные или управляющие запросы, которые не должны переписываться, а также аккаунтам
PRIVILEGE_CHECKS_USER(см. Раздел 19.3.3, «Проверка привилегий репликации»), используемым для применения запросов из источника репликации. -
Привилегия
SYSTEM_USERотличает системных пользователей от обычных пользователей:Пользователь с привилегией
SYSTEM_USERявляется системным пользователем.Пользователь без привилегии
SYSTEM_USERявляется обычным пользователем.
Привилегия
SYSTEM_USERвлияет на аккаунты, к которым данный пользователь может применять свои другие привилегии, а также на защиту пользователя от других аккаунтов:Системный пользователь может изменять как системные, так и обычные аккаунты. То есть, пользователь, обладающий соответствующими привилегиями для выполнения операции с обычными аккаунтами, благодаря наличию привилегии
SYSTEM_USER, также может выполнить эту операцию с системными аккаунтами. Системный аккаунт может быть изменён только системными пользователями с соответствующими привилегиями, а не обычными пользователями.Обычный пользователь с соответствующими привилегиями может изменять обычные аккаунты, но не системные аккаунты. Обычный аккаунт может быть изменён как системными, так и обычными пользователями с соответствующими привилегиями.
Это также означает, что объекты базы данных, созданные пользователями с привилегией
SYSTEM_USER, не могут быть изменены или удалены пользователями без этой привилегии. Это также относится к процедурам, для которых создатель имеет эту привилегию.Более подробная информация приведена в Разделе 8.2.11, «Категории аккаунтов».
Защита системных аккаунтов от изменения обычными аккаунтами, предоставляемая привилегией
SYSTEM_USER, не распространяется на обычные аккаунты, имеющие привилегии на схемеmysqlсистемы и, следовательно, могут напрямую изменять таблицы грантов в этой схеме. Для полной защиты не предоставляйте привилегии схемыmysqlобычным аккаунтам. См. Защиту системных аккаунтов от манипуляций обычными аккаунтами.Если используется плагин
audit_log(см. Раздел 8.4.5, «Аудит MySQL Enterprise»), аккаунтам с привилегиейSYSTEM_USERавтоматически назначается привилегияAUDIT_ABORT_EXEMPT, которая разрешает выполнение их запросов, даже если элемент “abort”, настроенный в фильтре, их заблокирует. Аккаунты с привилегиейSYSTEM_USERмогут поэтому быть использованы для восстановления доступа к системе после неправильной настройки аудита.
-
Воздействует на следующие операции и поведение сервера:
-
Включает изменения переменных системы во время выполнения:
Включает изменения конфигурации сервера для глобальных переменных системы с помощью
SET GLOBALиSET PERSIST.Включает изменения конфигурации сервера для глобальных переменных системы с помощью
SET PERSIST_ONLY, если у пользователя также естьPERSIST_RO_VARIABLES_ADMIN.Включает установку ограниченных переменных сеанса системы, требующих специального права. Фактически,
SYSTEM_VARIABLES_ADMINподразумеваетSESSION_VARIABLES_ADMINбез явного предоставленияSESSION_VARIABLES_ADMIN.
Включает изменения глобальных характеристик транзакции (см. Раздел 15.3.7, «Управление транзакцией»).
-
-
Позволяет пользователю переопределять параметры шифрования по умолчанию, когда
table_encryption_privilege_checkвключено; см. Определение шифрования по умолчанию для схем и общих табличных пространств. -
Включает настройку журнала телеметрии. Это право определяется плагином
telemetry_log, который развертывается через HeatWave на AWS. -
Включает подключение к серверу с привилегированным подключением. Когда предел, определенный
thread_pool_max_transactions_limitдостигнут, новые подключения не допускаются, если не переопределеныthread_pool_longrun_trx_limit. Привилегированное подключение игнорирует лимит транзакций и разрешает подключиться к серверу для увеличения лимита транзакций, удаления ограничения или завершения выполнения транзакций. По умолчанию это право никому не предоставляется. Чтобы установить привилегированное подключение, пользователь, инициирующий подключение, должен иметь правоTP_CONNECTION_ADMIN.Привилегированное подключение может выполнять инструкции и запускать транзакции, когда достигнут предел, определенный
thread_pool_max_transactions_limit. Привилегированное подключение помещается в группу потоковAdmin. См. Привилегированные подключения. -
Требуется для установки переменной системы
gtid_nextна значениеAUTOMATIC:илиTAGUUID:на сервере источника репликации. Кроме того, требуется как минимум одно изTAG:NUMBERSYSTEM_VARIABLES_ADMIN,SESSION_VARIABLES_ADMINилиREPLICATION_APPLIERдля установкиgtid_nextна одно из этих значений на источнике.REPLICATION_CHECKS_APPLIERтакже должен иметь это право, а также правоREPLICATION_APPLIERдля установкиgtid_nextна значениеAUTOMATIC:. Это проверяется при запуске потока репликации.TAGЭто право также необходимо для установки переменной серверной системы
gtid_purged.Дополнительную информацию об использовании GTID с метками см. в описании
gtid_next, а также Раздел 19.1.4, «Изменение режима GTID на онлайн-серверах». -
Разрешает выполнение функций Version Tokens. Это право устарело начиная с MySQL 9.2.0 и определяется плагином
version_tokens(также устарел); см. Раздел 7.6.6, «Version Tokens». -
Разрешает выполнение инструкции
XA RECOVER; см. Раздел 15.3.8.1, «SQL-инструкции транзакций XA».До MySQL 9.2 любой пользователь мог выполнить инструкцию
XA RECOVERдля определения значений XID для ожидающих подготовленных транзакций XA, что могло привести к подтверждению или отмене транзакции XA пользователем, отличным от того, кто ее начал. В MySQL 9.2 разрешено выполнятьXA RECOVERтолько пользователям, у которых есть правоXA_RECOVER_ADMIN, которое, как ожидается, будет предоставлено только административным пользователям, которые в этом нуждаются. Такая необходимость может возникнуть, например, для администраторов приложения XA, если оно потерпело сбой, и необходимо найти ожидающие транзакции, запущенные приложением, чтобы их можно было отменить. Это требование по правам предотвращает получение пользователями значений XID для ожидающих подготовленных транзакций XA, отличных от их собственных. Это не влияет на нормальное подтверждение или отмену транзакции XA, поскольку пользователь, который ее начал, знает ее XID.
Рекомендации по предоставлению привилегий
Рекомендуется предоставлять учетной записи только те привилегии, которые ей необходимы. Особое внимание следует уделить предоставлению привилегий доступа и административных привилегий:
Право
FILEможет быть злоупотреблено для чтения в таблицу базы данных любых файлов, которые может прочитать сервер MySQL на хосте сервера. Это включает все файлы с общедоступным доступом и файлы в каталоге данных сервера. Затем к таблице можно получить доступ с помощьюSELECTдля передачи ее содержимого на хост клиента.GRANT OPTIONпозволяет пользователям предоставлять свои привилегии другим пользователям. Два пользователя с разными привилегиями и правомGRANT OPTIONмогут объединить привилегии.ALTERможет использоваться для обхода системы привилегий путем переименования таблиц.SHUTDOWNможет быть использовано для полного отказа в обслуживании других пользователей путем завершения работы сервера.PROCESSможет использоваться для просмотра обычного текста выполняемых инструкций, включая инструкции, устанавливающие или изменяющие пароли.SUPERможет использоваться для завершения работы других сеансов или изменения работы сервера.-
Привилегии, предоставленные для самой базы данных
mysql, могут использоваться для изменения паролей и другой информации о правах доступа:Пароли хранятся в зашифрованном виде, поэтому злоумышленник не может просто прочитать их, чтобы узнать открытый пароль. Однако пользователь с правом записи в таблицу системы
mysql.userстолбецauthentication_stringможет изменить пароль учетной записи и затем подключиться к серверу MySQL с использованием этой учетной записи.INSERTилиUPDATE, предоставленные для базы данных системыmysql, позволяют пользователю добавлять или изменять существующие привилегии соответственно.DROPдля базы данных системыmysqlпозволяет пользователю удалять таблицы привилегий или даже саму базу данных.
Статические и динамические привилегии
MySQL поддерживает статические и динамические привилегии:
Статические привилегии встроенные в сервер. Они всегда доступны для предоставления учетным записям пользователей и не могут быть аннулированы.
Динамические привилегии могут быть зарегистрированы и аннулированы во время выполнения. Это влияет на их доступность: динамическая привилегия, которая не была зарегистрирована, не может быть предоставлена.
Например, привилегии SELECT и INSERT являются статическими и всегда доступны, тогда как динамическая привилегия становится доступной только в том случае, если компонент, реализующий ее, был включен.
В остальной части этого раздела описывается, как работают динамические привилегии в MySQL. В обсуждении используется термин «компоненты», но он одинаково применим к плагинам.
Администраторы сервера должны знать, какие компоненты сервера определяют динамические привилегии. Для дистрибутивов MySQL документация компонентов, определяющих динамические привилегии, описывает эти привилегии.
Компоненты сторонних разработчиков также могут определять динамические привилегии; администратор должен понимать эти привилегии и не устанавливать компоненты, которые могут привести к конфликту или нарушению работы сервера. Например, один компонент конфликтует с другим, если оба определяют привилегию с одинаковым именем. Разработчики компонентов могут снизить вероятность этого, выбрав имена привилегий, имеющие префикс, основанный на имени компонента.
Сервер сохраняет набор зарегистрированных динамических привилегий во внутренней памяти. Аннулирование происходит при выключении сервера.
Обычно компонент, определяющий динамические привилегии, регистрирует их при установке, во время последовательности инициализации. При удалении компонент не аннулирует свои зарегистрированные динамические привилегии. (Это текущая практика, а не требование. То есть, компоненты могли бы, но не аннулируют в любой момент привилегии, которые они регистрируют.)
При попытках зарегистрировать уже зарегистрированную динамическую привилегию не происходит предупреждений или ошибок. Рассмотрим следующую последовательность инструкций:
INSTALL COMPONENT 'my_component';
UNINSTALL COMPONENT 'my_component';
INSTALL COMPONENT 'my_component';
Первая инструкция INSTALL COMPONENT регистрирует все привилегии, определенные компонентом my_component, но UNINSTALL COMPONENT не аннулирует их. Для второй инструкции INSTALL
COMPONENT привилегии компонента, которые она регистрирует, оказываются уже зарегистрированными, но предупреждения или ошибки не возникают.
Динамические привилегии применяются только на глобальном уровне. Сервер сохраняет информацию о текущих назначениях динамических привилегий учетным записям пользователей в таблице системы mysql.global_grants:
Сервер автоматически регистрирует привилегии, перечисленные в
global_grants, во время запуска сервера (если не задан параметр--skip-grant-tables).Инструкции
GRANTиREVOKEизменяют содержимое таблицыglobal_grants.Назначения динамических привилегий, перечисленные в
global_grants, постоянные. Они не удаляются при завершении работы сервера.
Пример: следующая инструкция предоставляет пользователю u1 привилегии, необходимые для управления репликацией (включая Group Replication) на реплике и для изменения системных переменных:
GRANT REPLICATION_SLAVE_ADMIN, GROUP_REPLICATION_ADMIN, BINLOG_ADMIN
ON *.* TO 'u1'@'localhost';
Предоставленные динамические привилегии отображаются в выводе инструкции SHOW GRANTS и в таблице INFORMATION_SCHEMA USER_PRIVILEGES.
Для инструкций GRANT и REVOKE на глобальном уровне любые привилегии, не распознанные как статические, проверяются на соответствие текущему набору зарегистрированных динамических привилегий и предоставляются, если они найдены. В противном случае возникает ошибка, указывающая на неизвестный идентификатор привилегии.
Для инструкций GRANT и REVOKE значение ALL [PRIVILEGES] на глобальном уровне включает все статические глобальные привилегии, а также все текущие зарегистрированные динамические привилегии:
GRANT ALLна глобальном уровне предоставляет все статические глобальные привилегии и все текущие зарегистрированные динамические привилегии. Динамическая привилегия, зарегистрированная после выполнения инструкцииGRANT, не предоставляется ретроактивно ни одной учетной записи.REVOKE ALLна глобальном уровне отменяет все предоставленные статические глобальные привилегии и все предоставленные динамические привилегии.
Инструкция FLUSH PRIVILEGES считывает таблицу global_grants для назначения динамических привилегий и регистрирует любые не зарегистрированные привилегии, найденные там.
Описание динамических привилегий, предоставляемых MySQL Server и включенных в дистрибутивы MySQL, см. в разделе 8.2.2 «Предоставляемые MySQL привилегии».
Миграция учетных записей с SUPER на динамические привилегии
В MySQL 9.2 многие операции, которые ранее требовали привилегии SUPER, также связаны с динамической привилегией более ограниченного охвата. (Описание этих привилегий см. в разделе 8.2.2 «Предоставляемые MySQL привилегии».) Каждая такая операция может быть разрешена учетной записи путем предоставления соответствующей динамической привилегии вместо SUPER. Это изменение улучшает безопасность, позволяя администраторам баз данных избегать предоставления SUPER и более точно настраивать привилегии пользователей для разрешенных операций. SUPER теперь устарела; ожидается ее удаление в будущих версиях MySQL.
При удалении SUPER операции, которые раньше требовали SUPER, завершатся неудачно, если учетные записи, которым была предоставлена SUPER, не будут перенесены на соответствующие динамические привилегии. Используйте следующие инструкции для достижения этой цели, чтобы учетные записи были готовы до удаления SUPER:
-
Выполните этот запрос, чтобы определить учетные записи, которым предоставлена
SUPER:SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE = 'SUPER';
-
Для каждой учетной записи, определенной предыдущим запросом, определите операции, для которых ей нужна
SUPER. Затем предоставьте соответствующие динамические привилегии и аннулируйтеSUPER.Например, если
'u1'@'localhost'требуетSUPERдля очистки двоичного журнала и изменения системных переменных, эти инструкции внесут необходимые изменения в учетную запись:GRANT BINLOG_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'u1'@'localhost'; REVOKE SUPER ON *.* FROM 'u1'@'localhost';
После внесения изменений во все соответствующие учетные записи запрос
INFORMATION_SCHEMAв первом шаге должен возвращать пустой результат.
© 2025 Oracle
Licensed under the GPLv2 License.