8.4.1.10 Подключаемый модуль аутентификации для сокетов по идентификаторам клиентов
Подключаемый модуль аутентификации на стороне сервера авторизует клиентов, подключающихся с локального хоста через файл сокета Unix. Модуль использует параметр сокета SO_PEERCRED для получения информации о пользователе, запускающем клиентскую программу. Таким образом, модуль может использоваться только на системах, поддерживающих параметр SO_PEERCRED, таких как Linux.
Исходный код этого модуля можно изучить как относительно простой пример, демонстрирующий, как написать загружаемый модуль аутентификации.
В следующей таблице показаны имена файлов модуля и библиотеки. Файл должен находиться в каталоге, указанном переменной системы plugin_dir.
Таблица 8.25 Имена модуля и библиотеки для аутентификации по идентификаторам клиентов через сокет
| Модуль или файл | Имя модуля или файла |
|---|---|
| Модуль сервера | auth_socket |
| Модуль клиента | Нет, см. обсуждение |
| Файл библиотеки | auth_socket.so |
В следующих разделах содержится информация об установке и использовании, специфичная для подключаемой аутентификации через сокеты:
Для общей информации о подключаемой аутентификации в MySQL см. Раздел 8.2.17, «Подключаемая аутентификация».
Установка подключаемого модуля аутентификации через сокеты
Этот раздел описывает, как установить модуль аутентификации через сокет. Для получения общей информации об установке модулей см. Раздел 7.6.1, «Установка и удаление модулей».
Для использования сервером, файл библиотеки модуля должен находиться в каталоге модулей MySQL (каталог, указанный переменной системы plugin_dir). При необходимости, настройте расположение каталога модулей, задав значение plugin_dir при запуске сервера.
Чтобы загрузить модуль при запуске сервера, используйте параметр --plugin-load-add для указания имени файла библиотеки, содержащей модуль. С этим методом загрузки модулей, параметр должен быть указан каждый раз при запуске сервера. Например, поместите эти строки в файл сервера my.cnf:
[mysqld]
plugin-load-add=auth_socket.so
После изменения my.cnf перезапустите сервер, чтобы новые настройки вступили в силу.
В качестве альтернативы, для загрузки модуля во время выполнения используйте это утверждение:
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
INSTALL PLUGIN загружает модуль немедленно, а также регистрирует его в таблице системы mysql.plugins, чтобы заставить сервер загрузить его для каждого последующего обычного запуска без необходимости в --plugin-load-add.
Для проверки установки модуля, изучите таблицу Information Schema PLUGINS или используйте утверждение SHOW PLUGINS (см. Раздел 7.6.2, «Получение информации о модуле сервера»). Например:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%socket%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| auth_socket | ACTIVE |
+-------------+---------------+
Если модуль не удается инициализировать, проверьте журнал ошибок сервера на наличие диагностических сообщений.
Для привязки учетных записей MySQL к модулю сокета см. Использование подключаемой аутентификации через сокеты.
Удаление подключаемого модуля аутентификации через сокеты
Метод удаления подключаемого модуля аутентификации через сокет зависит от способа его установки:
Если вы установили модуль при запуске сервера, используя параметр
--plugin-load-add, перезапустите сервер без этого параметра.-
Если вы установили модуль во время выполнения с помощью оператора
INSTALL PLUGIN, он останется установленным после перезапуска сервера. Для удаления его используйте операторUNINSTALL PLUGIN:UNINSTALL PLUGIN auth_socket;
Использование подключаемого модуля аутентификации через сокеты
Модуль сокета проверяет, соответствует ли имя пользователя сокета (имя пользователя операционной системы) имени пользователя MySQL, указанному клиентской программой серверу. Если имена не совпадают, модуль проверяет, соответствует ли имя пользователя сокета имени, указанному в столбце authentication_string строки таблицы системы mysql.user. Если совпадение найдено, модуль разрешает подключение. Значение authentication_string может быть указано с помощью предложения IDENTIFIED ...AS с оператором CREATE USER или ALTER USER.
Предположим, что для пользователя операционной системы с именем valerie создана учетная запись MySQL, которая должна аутентифицироваться модулем auth_socket для подключений с локального хоста через файл сокета:
CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;
Если пользователь на локальном хосте с именем входа stefanie вызывает mysql с параметром --user=valerie для подключения через файл сокета, сервер использует auth_socket для аутентификации клиента. Модуль определяет, что значение параметра --user (valerie) отличается от имени пользователя клиента (stephanie) и отклоняет подключение. Если пользователь с именем valerie попробует то же самое, модуль обнаружит, что имя пользователя и имя пользователя MySQL оба равны valerie и разрешит подключение. Однако модуль отклоняет подключение даже для valerie, если подключение выполняется с использованием другого протокола, например, TCP/IP.
Чтобы разрешить как пользователю valerie, так и пользователю stephanie операционной системы доступ к MySQL через подключения к файлам сокета, которые используют учетную запись, это можно сделать двумя способами:
-
Укажите обоих пользователей во время создания учетной записи, одного после
CREATE USER, а другого в строке аутентификации:CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
-
Если вы уже использовали
CREATE USERдля создания учетной записи для одного пользователя, используйтеALTER USERдля добавления второго пользователя:CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket; ALTER USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
Для доступа к учетной записи как valerie, так и stephanie указаны --user=valerie при подключении.
© 2025 Oracle
Licensed under the GPLv2 License.