Spec-Zone .ru
спецификации, руководства, описания, API
|
Плагин аутентификации ПЭМ является коммерческим расширением. Чтобы узнать больше о коммерческих продуктах (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'
.
Плагин аутентификации ПЭМ обеспечивает эти возможности:
Внешняя аутентификация: плагин позволяет MySQL Server принять соединения от пользователей, определенных вне таблиц предоставления MySQL.
Проксируйте пользовательскую поддержку: плагин может возвратить MySQL имя
пользователя, отличающееся от пользователя входа в систему, основанного на группах, внешний пользователь
находится в и обеспеченная строка аутентификации. Это означает, что плагин может возвратить пользователя
MySQL, который определяет полномочия, которые должен иметь внешний PAM-аутентифицируемый пользователь.
Например, пользователя ПЭМ называют joe
может соединить и иметь полномочия
названного пользователя MySQL developer
.
Следующая таблица показывает имена файлов библиотеки и плагин. Суффикс имени файла мог бы отличаться на Вашей
системе. Расположение файла должно быть каталогом, названным 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, "Пользователи Прокси".
Плагин аутентификации ПЭМ должен быть расположен в каталоге плагина 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, "Получая информацию о Плагине Сервера".
Этот раздел описывает, как использовать плагин аутентификации ПЭМ, чтобы соединиться от клиентских программ MySQL до сервера. Предполагается, что серверный плагин включается и что клиентские программы являются достаточно недавними, чтобы включать клиентский плагин.
Клиентский плагин, с которым плагин ПЭМ связывается просто, отправляет пароль серверу в открытом тексте, таким образом, это можно передать ПЭМ. Это может быть проблемой безопасности в некоторых конфигурациях, но необходимо, чтобы пользоваться стороной сервера библиотека ПЭМ. Чтобы избежать проблем, если бы есть возможность, что пароль был бы прерван, клиенты должны соединиться с MySQL Server, используя SSL. См. Раздел 6.3.7.5, "Клиентский Плагин Аутентификации Открытого текста".
Обратиться к плагину аутентификации ПЭМ в IDENTIFIED WITH
пункт a CREATE USER
или GRANT
оператор, используйте имя authentication_pam
. Например:
CREATE USERuser
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, "Отладка Плагина ПЭМ Отэнтикэйшн".
Этот сценарий аутентификации использует ПЭМ только, чтобы проверить пользовательские имена для входа в систему Unix и пароли. У каждого внешнего пользователя, разрешенного соединяться с MySQL Server, должна быть соответствующая учетная запись MySQL, которая определяется, чтобы использовать внешнюю аутентификацию ПЭМ.
Проверьте, что аутентификация Unix в ПЭМ разрешает Вам входить в систему
как antonio
с паролем verysecret
.
Установите ПЭМ, чтобы аутентифицировать mysql
служба. Вставьте следующий /etc/pam.d/mysql
:
#%PAM-1.0auth include password-authaccount include password-auth
Создайте учетную запись MySQL с тем же самым именем пользователя как имя для входа в систему Unix и определите это, чтобы аутентифицировать использование плагина ПЭМ:
CREATE USER 'antonio'@'localhost' IDENTIFIED WITH authentication_pam AS 'mysql';GRANT ALL PRIVILEGES ON mydb.* TO 'antonio'@'localhost';
Попытайтесь соединиться с сервером 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, и что никакое
проксирование не произошло.
Этот сценарий аутентификации использует ПЭМ только, чтобы проверить пользовательские имена для входа в систему LDAP и пароли. У каждого внешнего пользователя, разрешенного соединяться с MySQL Server, должна быть соответствующая учетная запись MySQL, которая определяется, чтобы использовать внешнюю аутентификацию ПЭМ.
Проверьте, что аутентификация LDAP в ПЭМ разрешает Вам входить в систему
как antonio
с паролем verysecret
.
Установите ПЭМ, чтобы аутентифицировать mysql
служба через LDAP. Вставьте следующий /etc/pam.d/mysql
:
#%PAM-1.0auth required pam_ldap.soaccount required pam_ldap.so
Если у объектных файлов ПЭМ есть суффикс, отличающийся от .so
на Вашей системе замените корректным суффиксом.
Создание учетной записи MySQL и соединяющийся с сервером является тем же самым как ранее описано в Разделе 6.3.7.3.2.1, "Аутентификация по паролю Unix без Пользователей Прокси".
Это проксирование использования схемы аутентификации и группа, отображающаяся, чтобы отобразить пользователей, которые соединяются с сервером MySQL через ПЭМ на несколько учетных записей MySQL, которые определяют различные наборы полномочий. Пользователи не соединяются непосредственно через учетные записи, которые определяют полномочия. Вместо этого они соединяются через пользователя прокси значения по умолчанию, аутентифицирующего через ПЭМ, которая использует отображающуюся схему отобразить все внешние входы в систему на немного учетных записей MySQL, содержащих полномочия. Любой пользователь, который соединяется, отображается на один из MySQL, считает и использует его полномочия.
Процедура, показанная здесь, использует аутентификацию по паролю Unix. Чтобы использовать LDAP вместо этого, см. ранние шаги Раздела 6.3.7.3.2.2, "Аутентификация LDAP без Пользователей Прокси".
Проверьте, что аутентификация Unix в ПЭМ разрешает Вам входить в систему
как antonio
с паролем verysecret
и это
antonio
элемент root
или users
группа.
Установите ПЭМ, чтобы аутентифицировать mysql
служба. Вставьте следующий /etc/pam.d/mysql
:
#%PAM-1.0auth include password-authaccount include password-auth
Создайте пользователя прокси значения по умолчанию, который отображает
внешних пользователей ПЭМ на проксированные учетные записи. Это отображает внешних пользователей
от root
Группа ПЭМ к developer
Учетная
запись MySQL и внешние пользователи от users
Группа ПЭМ к data_entry
Учетная запись MySQL:
CREATE USER ''@'' IDENTIFIED WITH authentication_pam AS 'mysql, root=developer, users=data_entry';
Отображающийся список после имени службы требуется, когда Вы устанавливаете пользователей прокси. Иначе, плагин не может сказать, как отобразить имя групп ПЭМ к надлежащему проксированному имени пользователя.
Создайте проксированные учетные записи, которые будут использоваться, чтобы получить доступ к базам данных:
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
считайте по доверенности основанным на их группе
ПЭМ.
Предоставьте PROXY
полномочие к прокси учитывает проксированные учетные
записи:
GRANT PROXY ON 'developer'@'localhost' TO ''@'';GRANT PROXY ON 'data_entry'@'localhost' TO ''@'';
Попытайтесь соединиться с сервером 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 | ''@'' |+-------------------+----------------------+--------------+
Плагин аутентификации ПЭМ проверяет во время инициализации ли 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