Spec-Zone.ru › MySQL 8.4

8.4.1.9 Подключаемая аутентификация без входа

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

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

  • Прокси-аккаунты, которые никогда не должны допускать прямого входа, но предназначены для доступа только через прокси-аккаунты.

В следующей таблице показаны имена файла модуля и библиотеки. Суффикс имени файла может отличаться на вашей системе. Файл должен быть расположен в каталоге, указанном системной переменной plugin_dir.

Таблица 8.24 Имена модуля и библиотеки для аутентификации без входа

Таблица 8.24 Имена модуля и библиотеки для аутентификации без входа
Модуль или файл Имя модуля или файла
Модуль сервера mysql_no_login
Модуль клиента Нет
Файл библиотеки mysql_no_login.so

В следующих разделах представлена информация об установке и использовании, специфичная для подключаемой аутентификации без входа:

  • Установка подключаемой аутентификации без входа

  • Удаление подключаемой аутентификации без входа

  • Использование подключаемой аутентификации без входа

Для получения общей информации об подключаемой аутентификации в MySQL, см. Раздел 8.2.17, «Подключаемая аутентификация». Для информации о прокси-пользователях см. Раздел 8.2.19, «Прокси-пользователи».

Установка подключаемой аутентификации без входа

Этот раздел описывает, как установить модуль аутентификации без входа. Для получения общей информации об установке модулей см. Раздел 7.6.1, «Установка и удаление плагинов».

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

Базовое имя файла библиотеки модуля — mysql_no_login. Суффикс имени файла отличается в зависимости от платформы (например, .so для Unix-подобных систем и .dll для Windows).

Для загрузки модуля при запуске сервера используйте параметр --plugin-load-add для указания имени файла библиотеки, содержащей модуль. При таком способе загрузки модуля параметр должен указываться каждый раз при запуске сервера. Например, добавьте эти строки в файл сервера my.cnf, соответствующим образом адаптировав суффикс .so для вашей платформы:

[mysqld]
plugin-load-add=mysql_no_login.so

После изменения my.cnf перезапустите сервер, чтобы новые настройки вступили в силу.

В качестве альтернативы, для загрузки модуля во время работы используйте это выражение, соответственно адаптировав суффикс .so для вашей платформы:

INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';

INSTALL PLUGIN загружает модуль немедленно и также регистрирует его в таблице системы mysql.plugins, чтобы сервер загружал его при каждом последующем нормальном запуске без необходимости использования --plugin-load-add.

Для проверки установки модуля, проверьте таблицу схемы информации PLUGINS или используйте оператор SHOW PLUGINS (см. Раздел 7.6.2, «Получение информации о модулях сервера»). Например:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%login%';
+----------------+---------------+
| PLUGIN_NAME    | PLUGIN_STATUS |
+----------------+---------------+
| mysql_no_login | ACTIVE        |
+----------------+---------------+

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

Чтобы связать учетные записи MySQL с модулем аутентификации без входа, см. Использование подключаемой аутентификации без входа.

Удаление подключаемой аутентификации без входа

Способ удаления подключаемого модуля аутентификации без входа зависит от способа его установки:

  • Если модуль был установлен при запуске сервера с помощью параметра --plugin-load-add, перезапустите сервер без этого параметра.

  • Если модуль был установлен во время работы с помощью оператора INSTALL PLUGIN, он остаётся установленным после перезапуска сервера. Чтобы удалить его, используйте UNINSTALL PLUGIN:

    UNINSTALL PLUGIN mysql_no_login;
    
Использование подключаемой аутентификации без входа

Этот раздел описывает, как использовать модуль аутентификации без входа, чтобы предотвратить использование учетных записей для подключения из программ-клиентов MySQL к серверу. Предполагается, что сервер работает с включенным модулем аутентификации без входа, как описано в Установка подключаемой аутентификации без входа.

Чтобы указать подключаемый модуль аутентификации без входа в пункте IDENTIFIED WITH оператора CREATE USER, используйте имя mysql_no_login.

Аккаунт, аутентифицирующийся с помощью mysql_no_login, может использоваться в качестве аккаунта DEFINER для объектов хранимых программ и представлений. Если такое определение объекта также включает SQL SECURITY DEFINER, оно выполняется с привилегиями этой учетной записи. Администраторы баз данных могут использовать это поведение для предоставления доступа к конфиденциальным или чувствительным данным, которые доступны только через хорошо контролируемые интерфейсы.

Следующий пример иллюстрирует эти принципы. Он определяет аккаунт, который не допускает клиентских подключений, и связывает с ним представление, которое отображает только определённые столбцы таблицы системы mysql.user:

CREATE DATABASE nologindb;
CREATE USER 'nologin'@'localhost'
  IDENTIFIED WITH mysql_no_login;
GRANT ALL ON nologindb.*
  TO 'nologin'@'localhost';
GRANT SELECT ON mysql.user
  TO 'nologin'@'localhost';
CREATE DEFINER = 'nologin'@'localhost'
  SQL SECURITY DEFINER
  VIEW nologindb.myview
  AS SELECT User, Host FROM mysql.user;

Чтобы предоставить защищённый доступ к представлению обычному пользователю, сделайте следующее:

GRANT SELECT ON nologindb.myview
  TO 'ordinaryuser'@'localhost';

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

SELECT * FROM nologindb.myview;

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

Примечание

Поскольку учетная запись nologin не может использоваться напрямую, операции, необходимые для настройки объектов, которые она использует, должны выполняться учетной записью root или аналогичной учетной записью, имеющей необходимые привилегии для создания объектов и установки значений DEFINER.

Модуль mysql_no_login также полезен в сценариях проксирования. (Для обсуждения концепций, связанных с проксированием, см. Раздел 8.2.19, «Прокси-пользователи».) Аккаунт, аутентифицирующийся с помощью mysql_no_login, может использоваться в качестве прокси-пользователя для прокси-аккаунтов:

-- create proxied account
CREATE USER 'proxied_user'@'localhost'
  IDENTIFIED WITH mysql_no_login;
-- grant privileges to proxied account
GRANT ...
  ON ...
  TO 'proxied_user'@'localhost';
-- permit proxy_user to be a proxy account for proxied account
GRANT PROXY
  ON 'proxied_user'@'localhost'
  TO 'proxy_user'@'localhost';

Это позволяет клиентам получать доступ к MySQL через прокси-аккаунт (proxy_user), но не позволяет обойти механизм проксирования, подключившись напрямую как прокси-пользователь (proxied_user). Клиент, подключившийся с помощью учетной записи proxy_user, имеет привилегии учетной записи proxied_user, но сама учетная запись proxied_user не может быть использована для подключения.

Для альтернативных методов защиты прокси-аккаунтов от прямого использования см. Предотвращение прямого входа в прокси-аккаунты.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/no-login-pluggable-authentication.html

Spec-Zone.ru

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