Spec-Zone.ru › MySQL 5.7

6.2.3 Таблицы предоставления прав

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

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

Примечание

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

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

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

  • Таблицы предоставления прав user и db

  • Таблицы предоставления прав tables_priv и columns_priv

  • Таблица предоставления прав procs_priv

  • Таблица предоставления прав proxies_priv

  • Свойства столбцов области действия таблиц предоставления прав

  • Свойства столбцов прав таблиц предоставления прав

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

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

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

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

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

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

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

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

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

  • Столбцы области действия определяют область действия каждой строки в таблицах, то есть контекст, в котором применяется эта строка. Например, строка в таблице 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 указывают на хранимую процедуру, к которой относится каждая строка.

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

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

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

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

    Внимание

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

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

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

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

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

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

При изменении учётной записи рекомендуется проверить, что изменения произведены как предполагалось. Чтобы проверить права для данной учётной записи, используйте оператор 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 на обоих этапах контроля доступа (см. Раздел 6.2, «Контроль доступа и управление учетными записями»). Здесь показаны столбцы в таблицах user и db.

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

Таблица 6.3 Столбцы таблиц пользователей и баз данных
Имя таблицы 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
Столбцы безопасности ssl_type
ssl_cipher
x509_issuer
x509_subject
plugin
authentication_string
password_expired
password_last_changed
password_lifetime
account_locked
Столбцы управления ресурсами 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.

Для решения этой проблемы см. Раздел 6.4.1.3, «Миграция от хэширования паролей до версии 4.1 и плагина mysql_old_password».

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

Примечание

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

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

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

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

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

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

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

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

Таблица 6.4 Столбцы таблиц 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, которая содержит следующие столбцы, показанные в таблице ниже.

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

Таблица 6.5 Столбцы таблицы 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 настраивать прокси-пользователей и делегировать другим аккаунтам полномочия по настройке прокси-пользователей. См. Раздел 6.2.14, «Прокси-пользователи».

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

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

Таблица 6.6 Длины столбцов области в таблицах разрешений

Таблица 6.6 Длины столбцов области в таблицах разрешений
Имя столбца Максимальное количество символов
Host, Proxied_host 60
User, Proxied_user 32
Password 41
Db 64
Table_name 64
Column_name 64
Routine_name 64

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

Для целей проверки доступа сравнения значений User, Proxied_user, Password, 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. Значения в этих столбцах могут содержать любую комбинацию привилегий, управляемых таблицей. Только те привилегии, которые указаны в значении столбца, включены.

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

Таблица 6.7 Значения столбцов привилегий типа 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 указывает административные привилегии, такие как RELOAD и SHUTDOWN. Административные операции — это операции на самом сервере, а не на конкретной базе данных, поэтому нет необходимости перечислять эти привилегии в других таблицах разрешений. Следовательно, серверу нужно обращаться только к таблице user, чтобы определить, может ли пользователь выполнить административную операцию.

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

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

Spec-Zone.ru

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