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