Spec-Zone.ru › MySQL 9.2

8.4.1.8 Плагиновая аутентификация без входа

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

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

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

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

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

Таблица 8.23 Имена плагина и библиотеки для аутентификации без входа
Плагин или файл Имя плагина или файла
Плагин на стороне сервера 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 и 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. Предполагается, что сервер работает с плагином без входа, как описано в Установка плагиновой аутентификации без входа.

Для ссылки на плагин аутентификации без входа в операторе 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-9.2-en/no-login-pluggable-authentication.html

Spec-Zone.ru

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