Spec-Zone .ru
спецификации, руководства, описания, API

6.3.7.3. Плагин ПЭМ Отэнтикэйшн

Отметить

Плагин аутентификации ПЭМ является коммерческим расширением. Чтобы узнать больше о коммерческих продуктах (MySQL Enterprise Edition), см. http://www.mysql.com/products/.

С MySQL 5.6.10 коммерческие дистрибутивы MySQL включают плагин аутентификации, который позволяет MySQL Server использовать ПЭМ (Сменные Модули аутентификации), чтобы аутентифицировать пользователей MySQL. ПЭМ позволяет системе использовать стандартный интерфейс, чтобы получить доступ к различным видам методов аутентификации, таким как пароли Unix или каталог LDAP.

Использование плагина ПЭМ информация, которую передает к этому MySQL Server (такой как имя пользователя, имя хоста, пароль, и строка аутентификации), плюс любой метод, доступно для поиска ПЭМ. Плагин проверяет удостоверения пользователя по ПЭМ и возвратам 'Authentication succeeded, Username is user_name' или 'Authentication failed'.

Плагин аутентификации ПЭМ обеспечивает эти возможности:

Следующая таблица показывает имена файлов библиотеки и плагин. Суффикс имени файла мог бы отличаться на Вашей системе. Расположение файла должно быть каталогом, названным plugin_dir системная переменная. Для информации об установке см. Раздел 6.3.7.3.1, "Устанавливая Плагин ПЭМ Отэнтикэйшн".

Таблица 6.11. MySQL Плагин ПЭМ Отэнтикэйшн

Серверное имя плагина authentication_pam
Клиентское имя плагина mysql_clear_password
Имя объектного файла библиотеки authentication_pam.so

Файл библиотеки включает только серверный плагин. Клиентский плагин создается в libmysqlclient клиентская библиотека. См. Раздел 6.3.7.5, "Клиентский Плагин Аутентификации Открытого текста".

Сторона сервера плагин аутентификации ПЭМ включается только в коммерческих дистрибутивах. Это не включается в дистрибутивы сообщества MySQL. Клиентский плагин открытого текста, который связывается с серверным плагином, встраивается в клиентскую библиотеку MySQL и включается во все дистрибутивы, включая дистрибутивы сообщества. Это разрешает клиентам от любой 5.6.10 или более новое распределение соединяться с сервером, которому загрузили серверный плагин.

Плагин аутентификации ПЭМ был протестирован на Linux и Mac OS X. Это требует MySQL Server 5.6.10 или более новый.

Для получения общей информации о сменной аутентификации в MySQL, см. Раздел 6.3.7, "Сменная Аутентификация". Для информации о пользователе прокси см. Раздел 6.3.8, "Пользователи Прокси".

6.3.7.3.1. Установка Плагина ПЭМ Отэнтикэйшн

Плагин аутентификации ПЭМ должен быть расположен в каталоге плагина MySQL (каталог, названный plugin_dir системная переменная). В случае необходимости установите значение plugin_dir в сервере запускаются, чтобы сказать серверу расположение сменного каталога.

Чтобы включить плагину, запустите сервер с --plugin-load опция. Например, вставьте следующие строки Ваш my.cnf файл. Если у объектных файлов есть суффикс, отличающийся от .so на Вашей системе замените корректным суффиксом.

[mysqld]plugin-load=authentication_pam.so

Используйте сменное имя authentication_pam в IDENTIFIED WITH пункт CREATE USER или GRANT операторы для учетных записей MySQL, которые должны аутентифицироваться с этим плагином.

Чтобы проверить сменную установку, исследуйте INFORMATION_SCHEMA.PLUGINS таблица или использование SHOW PLUGINS оператор. См. Раздел 5.1.8.2, "Получая информацию о Плагине Сервера".

6.3.7.3.2. Используя Плагин ПЭМ Отэнтикэйшн

Этот раздел описывает, как использовать плагин аутентификации ПЭМ, чтобы соединиться от клиентских программ MySQL до сервера. Предполагается, что серверный плагин включается и что клиентские программы являются достаточно недавними, чтобы включать клиентский плагин.

Отметить

Клиентский плагин, с которым плагин ПЭМ связывается просто, отправляет пароль серверу в открытом тексте, таким образом, это можно передать ПЭМ. Это может быть проблемой безопасности в некоторых конфигурациях, но необходимо, чтобы пользоваться стороной сервера библиотека ПЭМ. Чтобы избежать проблем, если бы есть возможность, что пароль был бы прерван, клиенты должны соединиться с MySQL Server, используя SSL. См. Раздел 6.3.7.5, "Клиентский Плагин Аутентификации Открытого текста".

Обратиться к плагину аутентификации ПЭМ в IDENTIFIED WITH пункт a CREATE USER или GRANT оператор, используйте имя authentication_pam. Например:

CREATE USER user  IDENTIFIED WITH authentication_pam  AS 'authentication_string';

Строка аутентификации определяет следующие типы информации:

  • ПЭМ поддерживает понятие "имени службы,", который является именем, которое системный администратор может использовать, чтобы сконфигурировать метод аутентификации для определенного приложения. Могут быть несколько таких "приложений", связанных с единственным экземпляром сервера базы данных, таким образом, выбор имени службы оставляют разработчику приложений SQL. Когда Вы определяете учетную запись, которая должна аутентифицировать использование ПЭМ, определить имя службы в строке аутентификации.

  • ПЭМ обеспечивает путь к модулю ПЭМ, чтобы возвратить серверу имя пользователя MySQL кроме имени для входа в систему, предоставленного во время входа в систему. Используйте строку аутентификации, чтобы управлять отображением между именем пользователя MySQL и именем для входа в систему. Если Вы хотите использовать в своих интересах пользовательские возможности прокси, строка аутентификации должна включать этот вид отображения.

Например, если имя службы mysql и пользователи в root и users Группы ПЭМ должны быть отображены на developer и data_entry пользователи, соответственно, используют оператор как это:

CREATE USER user  IDENTIFIED WITH authentication_pam  AS 'mysql, root=developer, users=data_entry';

Строковый синтаксис аутентификации для плагина аутентификации ПЭМ следует за этими правилами:

  • Строка состоит из имени службы ПЭМ, дополнительно сопровождаемого группой, отображающей список, состоящий из одной или более пар ключевого слова/значения каждое определение названия группы и имени пользователя SQL:

    pam_service_name[,group_name=sql_user_name]...
  • Каждый group_name=sql_user_name паре должна предшествовать запятая.

  • Продвижение и конечные пробелы не в двойных кавычках игнорируется.

  • Неупомянутый pam_service_name, group_name, и sql_user_name значения могут содержать что-либо кроме знака "равно", запятой, или пространства.

  • Если a pam_service_name, group_name, или sql_user_name значение заключается в кавычки с двойными кавычками, все между кавычками - часть значения. Это необходимо, например, если значение содержит пробелы. Все символы являются законными кроме двойной кавычки и наклонной черты влево ('\'). Чтобы включать любой символ, выйдите из этого с наклонной чертой влево.

Плагин анализирует строку аутентификации на каждой проверке входа в систему. Чтобы минимизировать издержки, сохраните строку настолько короткой насколько возможно.

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

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

  • Если строка аутентификации действительно содержит группу, отображающую список, плагин исследует каждого group_name=sql_user_name пара в списке слева направо и попытках найти достойный group_name значение в каталоге не-MySQL групп присваивалось аутентифицируемому пользователю и возвратам sql_user_name для первого соответствия это находит. Если плагин не находит соответствия для какой-либо группы, он возвращает имя для входа в систему. Если плагин не способен к поиску группы в каталоге, это игнорирует группу, отображающую список, и возвращает имя для входа в систему.

Следующие разделы описывают, как установить несколько сценариев аутентификации, которые используют плагин аутентификации ПЭМ:

  • Никакие пользователи прокси. Это использует ПЭМ только, чтобы проверить имена для входа в систему и пароли. У каждого внешнего пользователя, разрешенного соединяться с MySQL Server, должна быть соответствующая учетная запись MySQL, которая определяется, чтобы использовать внешнюю аутентификацию ПЭМ. Аутентификация может быть выполнена различными методами PAM-supported. Обсуждение показывает, как использовать традиционные пароли Unix и LDAP.

    Аутентификация ПЭМ, если не сделанная через пользователей прокси или группы, требует, чтобы у учетной записи MySQL было то же самое имя пользователя как учетная запись Unix. Поскольку имена пользователей MySQL ограничиваются 16 символами (см. Раздел 6.2.2, "Полномочие Систем Грант Тэбльз"), это ограничивает аутентификацию непрокси ПЭМ учетными записями Unix с именами самое большее 16 символов.

  • Вход в систему прокси только и групповое отображение. Для этого сценария создайте несколько учетных записей MySQL, которые определяют различные наборы полномочий. (Идеально, никто не должен войти в систему через них непосредственно.) Затем определяют пользователя значения по умолчанию, аутентифицирующего через ПЭМ, которая использует некоторую отображающуюся схему (обычно внешними группами, пользователи находятся в) отобразить все внешние входы в систему на немного учетных записей MySQL, содержащих наборы полномочия. Любой пользователь, который входит в систему, отображается на один из MySQL, считает и использует его полномочия. Шоу обсуждения, как установить это использование паролей Unix, но других методов ПЭМ, таких как LDAP, могли использоваться вместо этого.

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

Примеры делают следующие предположения. Вы, возможно, должны были бы внести некоторые корректировки, если Ваша система устанавливается по-другому.

  • Каталог конфигурации ПЭМ /etc/pam.d.

  • Имя службы ПЭМ mysql, что означает, что следует установить названный файл ПЭМ mysql в каталоге конфигурации ПЭМ (создающий файл, если это не существует). Если Вы будете использовать различное имя службы, то имя файла будет отличаться, и следует использовать другое имя в AS пункт CREATE USER и GRANT операторы.

  • Примеры используют имя для входа в систему antonio и пароль verysecret. Измените их, чтобы соответствовать пользователям, которых Вы хотите аутентифицировать.

Плагин аутентификации ПЭМ проверяет во время инициализации ли AUTHENTICATION_PAM_LOG значение среды устанавливается. Если так, плагин позволяет регистрировать диагностических сообщений к стандартному выводу. Эти сообщения могут быть полезными для того, чтобы отладить PAM-связанные проблемы, которые происходят, когда плагин выполняет аутентификацию. Для получения дополнительной информации см. Раздел 6.3.7.3.3, "Отладка Плагина ПЭМ Отэнтикэйшн".

6.3.7.3.2.1. Аутентификация по паролю Unix без Пользователей Прокси

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

  1. Проверьте, что аутентификация Unix в ПЭМ разрешает Вам входить в систему как antonio с паролем verysecret.

  2. Установите ПЭМ, чтобы аутентифицировать mysql служба. Вставьте следующий /etc/pam.d/mysql:

    #%PAM-1.0auth            include         password-authaccount         include         password-auth
  3. Создайте учетную запись MySQL с тем же самым именем пользователя как имя для входа в систему Unix и определите это, чтобы аутентифицировать использование плагина ПЭМ:

    CREATE USER 'antonio'@'localhost'  IDENTIFIED WITH authentication_pam AS 'mysql';GRANT ALL PRIVILEGES ON mydb.* TO 'antonio'@'localhost';
  4. Попытайтесь соединиться с сервером MySQL, используя mysql клиент командной строки. Например:

    mysql --user=antonio --password=verysecret mydb

    Сервер должен разрешить соединение, и следующий запрос должен возвратить вывод как показано:

    mysql> SELECT USER(),
                                CURRENT_USER(), @@proxy_user;+-------------------+-------------------+--------------+| USER()            | CURRENT_USER()    | @@proxy_user |+-------------------+-------------------+--------------+| antonio@localhost | antonio@localhost | NULL         |+-------------------+-------------------+--------------+

    Это показывает это antonio использует полномочия, предоставленные antonio Учетная запись MySQL, и что никакое проксирование не произошло.

6.3.7.3.2.2. Аутентификация LDAP без Пользователей Прокси

Этот сценарий аутентификации использует ПЭМ только, чтобы проверить пользовательские имена для входа в систему LDAP и пароли. У каждого внешнего пользователя, разрешенного соединяться с MySQL Server, должна быть соответствующая учетная запись MySQL, которая определяется, чтобы использовать внешнюю аутентификацию ПЭМ.

  1. Проверьте, что аутентификация LDAP в ПЭМ разрешает Вам входить в систему как antonio с паролем verysecret.

  2. Установите ПЭМ, чтобы аутентифицировать mysql служба через LDAP. Вставьте следующий /etc/pam.d/mysql:

    #%PAM-1.0auth        required    pam_ldap.soaccount     required    pam_ldap.so

    Если у объектных файлов ПЭМ есть суффикс, отличающийся от .so на Вашей системе замените корректным суффиксом.

  3. Создание учетной записи MySQL и соединяющийся с сервером является тем же самым как ранее описано в Разделе 6.3.7.3.2.1, "Аутентификация по паролю Unix без Пользователей Прокси".

6.3.7.3.2.3. Аутентификация по паролю Unix с Пользователями Прокси и Групповое Отображение

Это проксирование использования схемы аутентификации и группа, отображающаяся, чтобы отобразить пользователей, которые соединяются с сервером MySQL через ПЭМ на несколько учетных записей MySQL, которые определяют различные наборы полномочий. Пользователи не соединяются непосредственно через учетные записи, которые определяют полномочия. Вместо этого они соединяются через пользователя прокси значения по умолчанию, аутентифицирующего через ПЭМ, которая использует отображающуюся схему отобразить все внешние входы в систему на немного учетных записей MySQL, содержащих полномочия. Любой пользователь, который соединяется, отображается на один из MySQL, считает и использует его полномочия.

Процедура, показанная здесь, использует аутентификацию по паролю Unix. Чтобы использовать LDAP вместо этого, см. ранние шаги Раздела 6.3.7.3.2.2, "Аутентификация LDAP без Пользователей Прокси".

  1. Проверьте, что аутентификация Unix в ПЭМ разрешает Вам входить в систему как antonio с паролем verysecret и это antonio элемент root или users группа.

  2. Установите ПЭМ, чтобы аутентифицировать mysql служба. Вставьте следующий /etc/pam.d/mysql:

    #%PAM-1.0auth            include         password-authaccount         include         password-auth
  3. Создайте пользователя прокси значения по умолчанию, который отображает внешних пользователей ПЭМ на проксированные учетные записи. Это отображает внешних пользователей от root Группа ПЭМ к developer Учетная запись MySQL и внешние пользователи от users Группа ПЭМ к data_entry Учетная запись MySQL:

    CREATE USER ''@''  IDENTIFIED WITH authentication_pam  AS 'mysql, root=developer, users=data_entry';

    Отображающийся список после имени службы требуется, когда Вы устанавливаете пользователей прокси. Иначе, плагин не может сказать, как отобразить имя групп ПЭМ к надлежащему проксированному имени пользователя.

  4. Создайте проксированные учетные записи, которые будут использоваться, чтобы получить доступ к базам данных:

    CREATE USER 'developer'@'localhost' IDENTIFIED BY 'very secret password';GRANT ALL PRIVILEGES ON mydevdb.* TO 'developer'@'localhost';CREATE USER 'data_entry'@'localhost' IDENTIFIED BY 'very secret password';GRANT ALL PRIVILEGES ON mydb.* TO 'data_entry'@'localhost'; 

    Если Вы не позволяете никому знать пароли для этих учетных записей, другие пользователи не могут использовать их, чтобы соединиться непосредственно с сервером MySQL. Вместо этого ожидается, что пользователи будут аутентифицировать использование ПЭМ и что они будут использовать developer или data_entry считайте по доверенности основанным на их группе ПЭМ.

  5. Предоставьте PROXY полномочие к прокси учитывает проксированные учетные записи:

    GRANT PROXY ON 'developer'@'localhost' TO ''@'';GRANT PROXY ON 'data_entry'@'localhost' TO ''@'';
  6. Попытайтесь соединиться с сервером MySQL, используя mysql клиент командной строки. Например:

    mysql --user=antonio --password=verysecret mydb

    Сервер аутентифицирует соединение, используя ''@'' учетная запись. Полномочия antonio будет иметь зависит, на каких группах ПЭМ он - элемент. Если antonio элемент root Группа ПЭМ, карты плагина ПЭМ root к developer Имя пользователя MySQL и возвраты, которые называют к серверу. Сервер проверяет это ''@'' имеет PROXY полномочие для developer и разрешает соединение. следующий запрос должен возвратить вывод как показано:

    mysql> SELECT USER(),
                                CURRENT_USER(), @@proxy_user;+-------------------+---------------------+--------------+| USER()            | CURRENT_USER()      | @@proxy_user |+-------------------+---------------------+--------------+| antonio@localhost | developer@localhost | ''@''        |+-------------------+---------------------+--------------+

    Это показывает это antonio использует полномочия, предоставленные developer Учетная запись MySQL, и что проксирование произошло через значение по умолчанию, проксирует учетную запись пользователя.

    Если antonio не элемент root Группа ПЭМ, но является элементом users группа, подобный процесс происходит, но сменные карты user состав группы к data_entry Имя пользователя MySQL и возвраты, которые называют к серверу. В этом случае, antonio использует полномочия data_entry Учетная запись MySQL:

    mysql> SELECT USER(),
                                CURRENT_USER(), @@proxy_user;+-------------------+----------------------+--------------+| USER()            | CURRENT_USER()       | @@proxy_user |+-------------------+----------------------+--------------+| antonio@localhost | data_entry@localhost | ''@''        |+-------------------+----------------------+--------------+

6.3.7.3.3. Отладка Плагина ПЭМ Отэнтикэйшн

Плагин аутентификации ПЭМ проверяет во время инициализации ли AUTHENTICATION_PAM_LOG значение среды устанавливается (значение не имеет значения). Если так, плагин позволяет регистрировать диагностических сообщений к стандартному выводу. Эти сообщения могут быть полезными для того, чтобы отладить PAM-связанные проблемы, которые происходят, когда плагин выполняет аутентификацию.

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

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

entering auth_pam_serverentering auth_pam_next_tokenauth_pam_next_token:reading at [cups,admin=writer,everyone=reader], sep=[,]auth_pam_next_token:state=PRESPACE, ptr=[cups,admin=writer,everyone=reader],out=[]auth_pam_next_token:state=IDENT, ptr=[cups,admin=writer,everyone=reader],out=[]auth_pam_next_token:state=AFTERSPACE, ptr=[,admin=writer,everyone=reader],out=[cups]auth_pam_next_token:state=DELIMITER, ptr=[,admin=writer,everyone=reader],out=[cups]auth_pam_next_token:state=DONE, ptr=[,admin=writer,everyone=reader],out=[cups]leaving auth_pam_next_token on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:191auth_pam_server:password 12345qq receivedauth_pam_server:pam_start rc=0auth_pam_server:pam_set_item(PAM_RUSER,gkodinov) rc=0auth_pam_server:pam_set_item(PAM_RHOST,localhost) rc=0entering auth_pam_server_convauth_pam_server_conv:PAM_PROMPT_ECHO_OFF [Password:] receivedleaving auth_pam_server_conv on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:257auth_pam_server:pam_authenticate rc=0auth_pam_server:pam_acct_mgmt rc=0auth_pam_server:pam_setcred(PAM_ESTABLISH_CRED) rc=0auth_pam_server:pam_get_item rc=0auth_pam_server:pam_setcred(PAM_DELETE_CRED) rc=0entering auth_pam_map_groupsentering auth_pam_walk_namevalue_listauth_pam_walk_namevalue_list:reading at: [admin=writer,everyone=reader]entering auth_pam_next_tokenauth_pam_next_token:reading at [admin=writer,everyone=reader], sep=[=]auth_pam_next_token:state=PRESPACE, ptr=[admin=writer,everyone=reader], out=[]auth_pam_next_token:state=IDENT, ptr=[admin=writer,everyone=reader], out=[]auth_pam_next_token:state=AFTERSPACE, ptr=[=writer,everyone=reader],out=[admin]auth_pam_next_token:state=DELIMITER, ptr=[=writer,everyone=reader],out=[admin]auth_pam_next_token:state=DONE, ptr=[=writer,everyone=reader], out=[admin]leaving auth_pam_next_token on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:191auth_pam_walk_namevalue_list:name=[admin]entering auth_pam_next_tokenauth_pam_next_token:reading at [writer,everyone=reader], sep=[,]auth_pam_next_token:state=PRESPACE, ptr=[writer,everyone=reader], out=[]auth_pam_next_token:state=IDENT, ptr=[writer,everyone=reader], out=[]auth_pam_next_token:state=AFTERSPACE, ptr=[,everyone=reader], out=[writer]auth_pam_next_token:state=DELIMITER, ptr=[,everyone=reader], out=[writer]auth_pam_next_token:state=DONE, ptr=[,everyone=reader], out=[writer]leaving auth_pam_next_token on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:191walk, &error_namevalue_list:value=[writer]entering auth_pam_map_group_to_userauth_pam_map_group_to_user:pam_user=gkodinov, name=admin, value=writerexamining member rootexamining member gkodinovsubstitution was made to mysql user writerleaving auth_pam_map_group_to_user on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:118auth_pam_walk_namevalue_list:found mappingleaving auth_pam_walk_namevalue_list on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:270auth_pam_walk_namevalue_list returned 0leaving auth_pam_map_groups on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:171auth_pam_server:authenticated_as=writerauth_pam_server: rc=0leaving auth_pam_server on/Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:429