Spec-Zone.ru › MySQL 9.2

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

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

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

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

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

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

Spec-Zone.ru

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