Spec-Zone.ru › MySQL 9.2

8.2.3 Таблицы разрешений

База данных системы mysql включает несколько таблиц разрешений, содержащих информацию об учётных записях пользователей и привилегиях, которыми они обладают. В этом разделе описываются эти таблицы. Сведения об остальных таблицах базы данных системы см. в разделе 7.3, «Схема базы данных mysql».

Здесь рассматривается внутренняя структура таблиц разрешений и как сервер использует их содержимое при взаимодействии с клиентами. Однако обычно вы не изменяете таблицы разрешений напрямую. Изменения происходят косвенно, когда вы используете операторы управления учётными записями, такие как CREATE USER, GRANT и REVOKE для создания учётных записей и управления доступными каждой из них привилегиями. См. раздел 15.7.1, «Операторы управления учётными записями». При использовании таких операторов для управления учётными записями сервер модифицирует таблицы разрешений от вашего имени.

Примечание

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

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

  • Обзор таблиц разрешений

  • Таблицы разрешений user и db

  • Таблицы разрешений tables_priv и columns_priv

  • Таблица разрешений procs_priv

  • Таблица разрешений proxies_priv

  • Таблица разрешений global_grants

  • Таблица разрешений default_roles

  • Таблица разрешений role_edges

  • Таблица разрешений password_history

  • Свойства столбцов области таблиц разрешений

  • Свойства столбцов привилегий таблиц разрешений

  • Конкурентность таблиц разрешений

END_OF_DOCUMENT_MARKER

Обзор таблиц предоставления прав

В этих mysql таблицах базы данных содержится информация о предоставлении прав:

  • user: Аккаунты пользователей, статические глобальные привилегии и другие столбцы, не являющиеся привилегиями.

  • global_grants: Динамические глобальные привилегии.

  • db: Привилегии на уровне базы данных.

  • tables_priv: Привилегии на уровне таблиц.

  • columns_priv: Привилегии на уровне столбцов.

  • procs_priv: Привилегии на хранимые процедуры и функции.

  • proxies_priv: Привилегии прокси-пользователей.

  • default_roles: Роли пользователей по умолчанию.

  • role_edges: Связи для подграфов ролей.

  • password_history: История смен паролей.

Для получения информации о различиях между статическими и динамическими глобальными привилегиями, см. Статические и динамические привилегии).

Таблицы предоставления прав используют InnoDB движок хранения и являются транзакционными. Каждое утверждение либо выполняется для всех указанных пользователей, либо отменяется и не оказывает никакого эффекта, если возникает какая-либо ошибка.

Каждая таблица предоставления прав содержит столбцы области применения и столбцы привилегий:

  • Столбцы области применения определяют область применения каждой строки в таблицах, то есть контекст, в котором применяется строка. Например, строка таблицы user со значениями Host и User равными 'h1.example.net' и 'bob' применяется к аутентифицированным соединениям, подключенным к серверу с хоста h1.example.net клиентом, который указывает имя пользователя bob. Аналогично, строка таблицы db со значениями столбцов Host, User и Db равными 'h1.example.net', 'bob' и 'reports' применяется, когда bob подключается с хоста h1.example.net для доступа к базе данных reports. Таблицы tables_priv и columns_priv содержат столбцы области применения, указывающие таблицы или сочетания таблица/столбец, к которым относится каждая строка. Столбцы области применения procs_priv указывают хранимую процедуру, к которой относится каждая строка.

  • Столбцы привилегий указывают, какие привилегии предоставляет строка таблицы, то есть какие операции она разрешает выполнять. Сервер объединяет информацию из различных таблиц предоставления прав, чтобы сформировать полное описание привилегий пользователя. Раздел 8.2.7 «Контроль доступа, этап 2: Проверка запроса» описывает правила для этого.

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

Сервер использует таблицы предоставления прав следующим образом:

  • Столбцы области применения таблицы user определяют, отклонить или разрешить входящие подключения. Для разрешенных подключений любые привилегии, предоставленные в таблице user, указывают статические глобальные привилегии пользователя. Любые привилегии, предоставленные в этой таблице, применяются к всем базам данных на сервере.

    Внимание

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

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

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

  • Таблицы tables_priv и columns_priv аналогичны таблице db, но более детализированы: они применяются на уровне таблиц и столбцов, а не на уровне базы данных. Привилегия, предоставленная на уровне таблицы, применяется к таблице и ко всем ее столбцам. Привилегия, предоставленная на уровне столбца, применяется только к определенному столбцу.

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

  • Таблица proxies_priv указывает, какие пользователи могут действовать в качестве прокси для других пользователей и может ли пользователь предоставить привилегию PROXY другим пользователям.

  • Таблицы default_roles и role_edges содержат информацию об отношениях между ролями.

  • Таблица password_history сохраняет ранее выбранные пароли, чтобы обеспечить ограничения на повторное использование паролей. См. Раздел 8.2.15, «Управление паролями».

Сервер загружает содержимое таблиц предоставления прав в память при запуске. Вы можете перегрузить таблицы, выполнив оператор FLUSH PRIVILEGES или выполнив команду mysqladmin flush-privileges или mysqladmin reload. Изменения в таблицах предоставления прав вступают в силу, как указано в разделе 8.2.13 «Когда изменения привилегий вступают в силу».

При изменении учетной записи рекомендуется проверить, что изменения имеют желаемый эффект. Чтобы проверить привилегии для данной учетной записи, используйте оператор SHOW GRANTS. Например, чтобы определить привилегии, предоставленные учетной записи с именем пользователя и именем хоста bob и pc84.example.com, используйте этот оператор:

SHOW GRANTS FOR 'bob'@'pc84.example.com';

Чтобы отобразить свойства учетной записи, не являющиеся привилегиями, используйте SHOW CREATE USER:

SHOW CREATE USER 'bob'@'pc84.example.com';

Таблицы разрешений пользователя и базы данных

Сервер использует таблицы user и db в базе данных mysql на обоих этапах контроля доступа (см. раздел 8.2, «Контроль доступа и управление учётными записями»). Столбцы в таблицах user и db показаны здесь.

Таблица 8.4 Столбцы таблиц пользователей и баз данных

Таблица 8.4 Столбцы таблиц пользователей и баз данных
Имя таблицы user db
Столбцы области действия Host Host
User Db
User
Столбцы привилегий Select_priv Select_priv
Insert_priv Insert_priv
Update_priv Update_priv
Delete_priv Delete_priv
Index_priv Index_priv
Alter_priv Alter_priv
Create_priv Create_priv
Drop_priv Drop_priv
Grant_priv Grant_priv
Create_view_priv Create_view_priv
Show_view_priv Show_view_priv
Create_routine_priv Create_routine_priv
Alter_routine_priv Alter_routine_priv
Execute_priv Execute_priv
Trigger_priv Trigger_priv
Event_priv Event_priv
Create_tmp_table_priv Create_tmp_table_priv
Lock_tables_priv Lock_tables_priv
References_priv References_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Show_db_priv
Super_priv
Repl_slave_priv
Repl_client_priv
Create_user_priv
Create_tablespace_priv
Create_role_priv
Drop_role_priv
Столбцы безопасности ssl_type
ssl_cipher
x509_issuer
x509_subject
plugin
authentication_string
password_expired
password_last_changed
password_lifetime
account_locked
Password_reuse_history
Password_reuse_time
Password_require_current
User_attributes
Столбцы управления ресурсами max_questions
max_updates
max_connections
max_user_connections

Таблица user содержит столбцы plugin и authentication_string, хранящие информацию о плагине аутентификации и учетных данных.

Сервер использует плагин, указанный в столбце plugin строки учётной записи, для аутентификации попыток подключения к данной учётной записи.

Столбец plugin должен быть непустым. При запуске и при выполнении FLUSH PRIVILEGES, сервер проверяет строки таблицы user. Для любой строки с пустым столбцом plugin сервер записывает предупреждение в журнал ошибок в следующем формате:

[Warning] User entry 'user_name'@'host_name' has an empty plugin
value. The user will be ignored and no one can login with this user
anymore.

Чтобы назначить плагин учётной записи, которой он отсутствует, используйте оператор ALTER USER.

Столбец password_expired позволяет администраторам баз данных истекать пароли учётных записей и требовать от пользователей сброс пароля. Значение по умолчанию password_expired равно 'N', но может быть установлено в 'Y' с помощью оператора ALTER USER. После истечения срока действия пароля учётной записи все операции, выполненные данной учётной записью в последующих подключениях к серверу, приводят к ошибке, пока пользователь не выполнит оператор ALTER USER для установки нового пароля учётной записи.

Примечание

Хотя возможно “сбросить” истекший пароль, установив его в текущее значение, предпочтительнее выбрать другой пароль. Администраторы баз данных могут обеспечить неиспользование старых паролей, установив соответствующую политику повторного использования паролей. См. Политику повторного использования паролей.

password_last_changed — это столбец TIMESTAMP, указывающий, когда пароль был изменён в последний раз. Значение непустое только для учётных записей, использующих встроенный плагин аутентификации MySQL (sha256_password или caching_sha2_password). Значение пустое для других учётных записей, таких как учётные записи, аутентифицированные с помощью внешней системы аутентификации.

password_last_changed обновляется операторами CREATE USER, ALTER USER и SET PASSWORD, а также операторами GRANT, создающими учётную запись или изменяющими пароль учётной записи.

password_lifetime указывает срок действия пароля учётной записи в днях. Если срок действия пароля истек (определяется по столбцу password_last_changed), сервер считает пароль истекшим при подключении клиентов с помощью данной учётной записи. Значение, большее нуля, означает, что пароль должен быть изменён каждые N дней. Значение 0 отключает автоматическое истечение срока действия пароля. Если значение равно NULL (значение по умолчанию), применяется глобальная политика истечения, определённая системной переменной default_password_lifetime.

account_locked указывает, заблокирована ли учётная запись (см. раздел 8.2.20, «Блокировка учётных записей»).

Password_reuse_history — это значение опции PASSWORD HISTORY для учётной записи или NULL для истории по умолчанию.

Password_reuse_time — это значение опции PASSWORD REUSE INTERVAL для учётной записи или NULL для интервала по умолчанию.

Password_require_current соответствует значению опции PASSWORD REQUIRE для учётной записи, как показано в следующей таблице.

Таблица 8.5 Разрешённые значения Password_require_current

Таблица 8.5 Разрешённые значения Password_require_current
Значение Password_require_current Соответствующая опция PASSWORD REQUIRE
'Y' PASSWORD REQUIRE CURRENT
'N' PASSWORD REQUIRE CURRENT OPTIONAL
NULL PASSWORD REQUIRE CURRENT DEFAULT

User_attributes — это столбец в формате JSON, который хранит атрибуты учётной записи, не хранящиеся в других столбцах. INFORMATION_SCHEMA предоставляет доступ к этим атрибутам через таблицу USER_ATTRIBUTES.

В столбце User_attributes могут содержаться следующие атрибуты:

  • additional_password: Дополнительный пароль, если таковой имеется. См. Поддержка двойных паролей.

  • Restrictions: Список ограничений, если таковой имеется. Ограничения добавляются операциями частичного отзыва. Значение атрибута — массив элементов, каждый из которых содержит ключи Database и Restrictions, указывающие имя ограниченной базы данных и применимые к ней ограничения (см. Раздел 8.2.12, «Ограничение привилегий с помощью частичного отзыва»).

  • Password_locking: Условия для отслеживания неудачных попыток входа и временной блокировки учетной записи, если таковые имеются (см. Отслеживание неудачных попыток входа и временная блокировка учетной записи). Атрибут Password_locking обновляется в соответствии с опциями FAILED_LOGIN_ATTEMPTS и PASSWORD_LOCK_TIME в операциях CREATE USER и ALTER USER. Значение атрибута — хеш-таблица с ключами failed_login_attempts и password_lock_time_days, указывающими значения указанных опций для учетной записи. Если ключ отсутствует, его значение неявно равно 0. Если значение ключа неявно или явно равно 0, соответствующая возможность отключена.

  • multi_factor_authentication: Строки в таблице системы mysql.user содержат столбец plugin, указывающий на плагин аутентификации. Для однофакторной аутентификации этот плагин является единственным фактором аутентификации. Для двух- или трехфакторных форм многофакторной аутентификации этот плагин соответствует первому фактору аутентификации, но для второго и третьего факторов должна храниться дополнительная информация. Атрибут multi_factor_authentication содержит эту информацию.

    Значение multi_factor_authentication — массив, где каждый элемент массива — хеш-таблица, описывающая фактор аутентификации с помощью следующих атрибутов:

    • plugin: Название плагина аутентификации.

    • authentication_string: Значение строки аутентификации.

    • passwordless: Флаг, указывающий, предназначен ли пользователь для использования без пароля (с токеном безопасности в качестве единственного метода аутентификации).

    • requires_registration: Флаг, определяющий, зарегистрировала ли учетная запись пользователя токен безопасности.

    Первый и второй элементы массива описывают факторы многофакторной аутентификации 2 и 3.

Если атрибуты не применимы, то User_attributes равно NULL.

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

mysql> SELECT User_attributes FROM mysql.User WHERE User = 'u'\G
*************************** 1. row ***************************
User_attributes: {"Restrictions":
                   [{"Database": "mysql", "Privileges": ["SELECT"]}],
                  "additional_password": "hashed_credentials"}

Для определения присутствия атрибутов используйте функцию JSON_KEYS():

SELECT User, Host, JSON_KEYS(User_attributes)
FROM mysql.user WHERE User_attributes IS NOT NULL;

Для извлечения конкретного атрибута, например, Restrictions, выполните следующие действия:

SELECT User, Host, User_attributes->>'$.Restrictions'
FROM mysql.user WHERE User_attributes->>'$.Restrictions' <> '';

Вот пример того, какая информация хранится для multi_factor_authentication:

{
  "multi_factor_authentication": [
    {
      "plugin": "authentication_ldap_simple",
      "passwordless": 0,
      "authentication_string": "ldap auth string",
      "requires_registration": 0
    },
    {
      "plugin": "authentication_webauthn",
      "passwordless": 0,
      "authentication_string": "",
      "requires_registration": 1
    }
  ]
}

Таблицы разрешений tables_priv и columns_priv

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

Таблица 8.6 Столбцы таблиц tables_priv и columns_priv

Таблица 8.6 Столбцы таблиц tables_priv и columns_priv
Имя таблицы tables_priv columns_priv
Столбцы области применения Host Host
Db Db
User User
Table_name Table_name
Column_name
Столбцы привилегий Table_priv Column_priv
Column_priv
Другие столбцы Timestamp Timestamp
Grantor

Столбцы Timestamp и Grantor устанавливаются на текущую метку времени и значение функции CURRENT_USER соответственно, но в остальном не используются.

Таблица разрешений procs_priv

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

Таблица 8.7 Столбцы таблицы procs_priv

Таблица 8.7 Столбцы таблицы procs_priv
Имя таблицы procs_priv
Столбцы области применения Host
Db
User
Routine_name
Routine_type
Столбцы привилегий Proc_priv
Другие столбцы Timestamp
Grantor

Столбец Routine_type — это столбец типа ENUM со значениями 'FUNCTION' или 'PROCEDURE', указывающими на тип процедуры, к которой относится строка. Этот столбец позволяет предоставлять привилегии отдельно для функции и процедуры с одинаковым именем.

Столбцы Timestamp и Grantor не используются.

Таблица разрешений proxies_priv

Таблица proxies_priv записывает информацию об учетных записях-прокси. Она содержит следующие столбцы:

  • Host, User: Учетная запись-прокси, то есть учетная запись, имеющая привилегию PROXY для проксируемой учетной записи.

  • Proxied_host, Proxied_user: Проксируемая учетная запись.

  • Grantor, Timestamp: Не используются.

  • With_grant: Может ли учетная запись-прокси предоставить привилегию PROXY другим учетным записям.

Чтобы учетная запись могла предоставить привилегию PROXY другим учетным записям, она должна иметь строку в таблице proxies_priv со значением With_grant, равным 1, и значениями Proxied_host и Proxied_user, указывающими на учетные записи, которым может быть предоставлена привилегия. Например, учетная запись 'root'@'localhost', созданная во время установки MySQL, имеет строку в таблице proxies_priv, которая позволяет предоставлять привилегию PROXY для ''@'', то есть для всех пользователей и всех хостов. Это позволяет пользователю root настраивать прокси-пользователей, а также делегировать другим учетным записям право на настройку прокси-пользователей. См. Раздел 8.2.19, «Прокси-пользователи».

Таблица разрешений global_grants

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

  • USER, HOST: Имя пользователя и имя хоста учетной записи, которой предоставлена привилегия.

  • PRIV: Название привилегии.

  • WITH_GRANT_OPTION: Может ли учетная запись предоставить привилегию другим учетным записям.

Таблица прав доступа default_roles

Таблица default_roles перечисляет стандартные роли пользователей. Она имеет следующие столбцы:

  • HOST, USER: Учётная запись или роль, к которой применяется стандартная роль.

  • DEFAULT_ROLE_HOST, DEFAULT_ROLE_USER: Стандартная роль.

Таблица прав доступа role_edges

Таблица role_edges перечисляет связи для подграфов ролей. Она имеет следующие столбцы:

  • FROM_HOST, FROM_USER: Учётная запись, которой предоставлена роль.

  • TO_HOST, TO_USER: Роль, предоставленная учётной записи.

  • WITH_ADMIN_OPTION: Может ли учётная запись предоставлять и отзывать роль другим учётным записям, используя WITH ADMIN OPTION.

Таблица прав доступа password_history

Таблица password_history содержит информацию о смене паролей. Она имеет следующие столбцы:

  • Host, User: Учётная запись, для которой произошла смена пароля.

  • Password_timestamp: Время изменения пароля.

  • Password: Значение нового хэша пароля.

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

Примечание

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

Если имя учётной записи изменено, её записи переименовываются соответственно. Если учётная запись удалена или её модуль аутентификации изменён, её записи удаляются.

Свойства столбцов области в таблицах прав доступа

Столбцы области в таблицах прав доступа содержат строки. Значение по умолчанию для каждого из них — пустая строка. Следующая таблица показывает количество символов, разрешенных в каждом столбце.

Таблица 8.8 Длины столбцов области таблиц прав доступа

Таблица 8.8 Длины столбцов области таблиц прав доступа
Имя столбца Максимальное количество разрешенных символов
Host, Proxied_host 255
User, Proxied_user 32
Db 64
Table_name 64
Column_name 64
Routine_name 64

Значения Host и Proxied_host преобразуются в нижний регистр перед сохранением в таблицах прав доступа.

Для целей проверки доступа сравнения значений User, Proxied_user, authentication_string, Db и Table_name регистрозависимые. Сравнения значений Host, Proxied_host, Column_name и Routine_name не регистрозависимые.

Свойства столбцов привилегий в таблицах прав доступа

Таблицы user и db перечисляют каждую привилегию в отдельном столбце, объявленном как ENUM('N','Y') DEFAULT 'N'. Другими словами, каждая привилегия может быть отключена или включена, по умолчанию она отключена.

Таблицы tables_priv, columns_priv и procs_priv объявляют столбцы привилегий как столбцы типа SET. Значения в этих столбцах могут содержать любую комбинацию привилегий, контролируемых таблицей. Включены только те привилегии, которые указаны в значении столбца.

Таблица 8.9 Значения столбцов привилегий типа set

Таблица 8.9 Значения столбцов привилегий типа set
Имя таблицы Имя столбца Возможные элементы множества
tables_priv Table_priv 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger'
tables_priv Column_priv 'Select', 'Insert', 'Update', 'References'
columns_priv Column_priv 'Select', 'Insert', 'Update', 'References'
procs_priv Proc_priv 'Execute', 'Alter Routine', 'Grant'

Только таблицы user и global_grants указывают административные привилегии, такие как RELOAD, SHUTDOWN и SYSTEM_VARIABLES_ADMIN. Административные операции — это операции над самим сервером, а не конкретной базой данных, поэтому нет смысла перечислять эти привилегии в других таблицах прав доступа. Следовательно, серверу достаточно проконсультироваться только с таблицами user и global_grants, чтобы определить, может ли пользователь выполнить административную операцию.

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

Конкурентность таблиц прав доступа

Для разрешения одновременных операций DML и DDL над таблицами прав доступа MySQL, операции чтения, которые ранее получали блокировки строк в таблицах прав доступа MySQL, выполняются как операции чтения без блокировки. К операциям, выполняемым как операции чтения без блокировки над таблицами прав доступа MySQL, относятся:

  • SELECT операторы и другие операторы только для чтения, которые считывают данные из таблиц прав доступа через списки объединений и подзапросы, включая SELECT ... FOR SHARE операторы, используя любой уровень изоляции транзакций.

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

Операторы, которые больше не получают блокировки строк при чтении данных из таблиц прав доступа, сообщают об ошибке, если они выполняются при использовании репликации на уровне операторов.

При использовании -binlog_format=mixed, операции DML, которые считывают данные из таблиц прав доступа, записываются в бинарный журнал как события строк, чтобы сделать операции безопасными для репликации в смешанном режиме.

SELECT ... FOR SHARE операторы, которые считывают данные из таблиц прав доступа, сообщают об ошибке. С помощью фразы FOR SHARE блокировки чтения не поддерживаются в таблицах прав доступа.

Операции DML, которые считывают данные из таблиц прав доступа и выполняются с уровнем изоляции SERIALIZABLE, сообщают об ошибке. Блокировки чтения, которые обычно приобретаются при использовании уровня изоляции SERIALIZABLE, не поддерживаются в таблицах прав доступа.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/grant-tables.html

Spec-Zone.ru

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