6.4.1.10 Подключаемый модуль аутентификации без входа
Подключаемый модуль аутентификации на стороне сервера mysql_no_login предотвращает все подключения клиентов к любому аккаунту, который его использует. Сферы применения этого модуля включают:
Аккаунты, которые должны иметь возможность выполнять хранимые программы и представления с повышенными привилегиями, не предоставляя эти привилегии обычным пользователям.
Проксированные аккаунты, которые никогда не должны допускать прямой вход в систему, но предназначены для доступа только через прокси-аккаунты.
В следующей таблице показаны имена файлов модуля и библиотеки. Суффикс имени файла может отличаться в вашей системе. Файл должен находиться в каталоге, указанном переменной системы plugin_dir.
Таблица 6.17 Имена модуля и библиотеки для аутентификации без входа
| Модуль или файл | Имя модуля или файла |
|---|---|
| Модуль серверной стороны | mysql_no_login |
| Модуль клиентской стороны | Нет |
| Файл библиотеки | mysql_no_login.so |
В следующих разделах приводится информация об установке и использовании, специфичная для подключаемого модуля аутентификации без входа:
Для получения общей информации об аутентификации с помощью подключаемых модулей в MySQL см. Раздел 6.2.13, «Подключаемая аутентификация». Для информации о прокси-пользователях см. Раздел 6.2.14, «Прокси-пользователи».
Установка подключаемого модуля аутентификации без входа
Этот раздел описывает, как установить подключаемый модуль аутентификации без входа. Для получения общей информации об установке подключаемых модулей см. Раздел 5.5.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 (см. Раздел 5.5.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 также полезен в сценариях проксирования. (Для обсуждения концепций, связанных с проксированием, см. Раздел 6.2.14, «Прокси-пользователи».) Аккаунт, аутентифицированный с помощью 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.