8.4.1.8 Плагиновая аутентификация без входа
Плагин аутентификации на стороне сервера mysql_no_login предотвращает все подключения клиентов к любому аккаунту, использующему его. Примеры использования этого плагина включают:
Аккаунты, которые должны иметь возможность выполнять сохраненные программы и представления с повышенными привилегиями без предоставления этих привилегий обычным пользователям.
Прокси-аккаунты, которые никогда не должны допускать прямой вход, но предназначены для доступа только через прокси-аккаунты.
В следующей таблице показаны имена файлов плагина и библиотеки. Приставка имени файла может отличаться на вашей системе. Файл должен находиться в каталоге, указанном переменной системы plugin_dir.
Таблица 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.