Spec-Zone.ru › MySQL 5.7

6.4.1.11 Подключаемая аутентификация сокета для проверки подлинности клиента

Подключаемый модуль аутентификации на стороне сервера проверяет подлинность клиентов, подключающихся с локального хоста через файл сокета Unix. Модуль использует опцию сокета SO_PEERCRED, чтобы получить информацию о пользователе, запускающем клиентскую программу. Таким образом, модуль может быть использован только на системах, поддерживающих опцию SO_PEERCRED, таких как Linux.

Исходный код этого модуля можно изучить в качестве относительно простого примера, демонстрирующего, как написать загружаемый модуль аутентификации.

В следующей таблице показаны имена файлов модуля и библиотеки. Файл должен находиться в каталоге, указанном системной переменной plugin_dir.

Таблица 6.18 Имена модуля и библиотеки для аутентификации по сокету с проверкой подлинности пользователя

Таблица 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/socket-pluggable-authentication.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API