6.4.1.11 Подключаемая аутентификация сокета для проверки подлинности клиента
Подключаемый модуль аутентификации на стороне сервера проверяет подлинность клиентов, подключающихся с локального хоста через файл сокета Unix. Модуль использует опцию сокета SO_PEERCRED, чтобы получить информацию о пользователе, запускающем клиентскую программу. Таким образом, модуль может быть использован только на системах, поддерживающих опцию SO_PEERCRED, таких как Linux.
Исходный код этого модуля можно изучить в качестве относительно простого примера, демонстрирующего, как написать загружаемый модуль аутентификации.
В следующей таблице показаны имена файлов модуля и библиотеки. Файл должен находиться в каталоге, указанном системной переменной plugin_dir.
Таблица 6.18 Имена модуля и библиотеки для аутентификации по сокету с проверкой подлинности пользователя
| Модуль или файл | Имя модуля или файла |
|---|---|
| Модуль сервера | auth_socket |
| Модуль клиента | Отсутствует, см. обсуждение |
| Файл библиотеки | auth_socket.so |
Следующие разделы содержат информацию об установке и использовании, специфичную для подключаемой аутентификации по сокету:
Дополнительную информацию об аутентификации по плагинам в MySQL см. в разделе 6.2.13, «Подключаемая аутентификация».
Установка подключаемой аутентификации по сокету
В этом разделе описывается, как установить модуль аутентификации по сокету. Дополнительную информацию об установке модулей см. в разделе 5.5.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 (см. раздел 5.5.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.
Предположим, что учётная запись MySQL создана для пользователя операционной системы с именем valerie, который должен быть проверен модулем аутентификации 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.