Spec-Zone.ru › MySQL 8.4

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 (mysql_native_password, который устарел, sha256_password, который устарел, или caching_sha2_password). Для других учетных записей, таких как те, которые аутентифицированы с помощью внешней системы аутентификации, значение равно NULL.

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

password_lifetime указывает срок действия пароля учетной записи в днях. Если срок действия пароля истек (определяется с помощью столбца password_last_changed), сервер считает пароль истекшим при подключении клиентов с использованием данной учетной записи. Значение N, большее нуля, означает, что пароль должен быть изменён каждые 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-8.4-en/grant-tables.html

Spec-Zone.ru

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