Использование LDAP (AD) для аутентификации MySQL
Я пытаюсь разработать план, позволяющий пользователям работать с базой данных MySQL (многие, фактически) с использованием LDAP. Более конкретно, ActiveDirectory. Доступ к базе данных, скорее всего, будет доступен через приложения, а не в Интернете. Какие у меня варианты?
EDIT:
Хорошо. Похоже, что нет "официального" способа разрешить аутентификацию в MySQL с использованием LDAP. Какие существуют другие варианты? Можем ли мы синхронизировать пользователей и пароли LDAP с таблицей пользователей MySQL?
Ответы
Ответ 1
это возможно с помощью mysql proxy. вам нужно знать несколько вещей, чтобы сделать эту работу:
- mysql proxy может выполнять команды оболочки
- mysql proxy может перехватывать и переписывать аутентификацию
эти две страницы помогут вам начать работу:
Ответ 2
Вы можете использовать плагин auth_ldap, предоставленный Infoscope Hellas L.P. под GPL.
Его можно загрузить из sourceforge по адресу:
http://sourceforge.net/projects/mysqlauthldap/
Домашняя страница:
http://infoscope.gr/mysqlauthldap
Плагин по-прежнему является бета-версией и работает только для установок UNIX.
Ответ 3
Пожалуйста, посмотрите http://dev.mysql.com/doc/refman/5.5/en/news-5-5-7.html
Это в кандидате на выпуск 5.5.7
Ответ 4
Теперь это возможно с коммерческими расширениями, например. с Внешняя аутентификация MySQL для Windows:
Это позволяет настроить MySQL для использования собственных служб Windows для аутентификации клиентских подключений. Пользователи, которые вошли в систему Windows, могут подключаться из клиентских программ MySQL к серверу на основе информации о токенах в своей среде без указания дополнительного пароля.
Ответ 5
Похоже, вы из-за удачи: (
Не могли бы вы использовать PostgreSQL?
Этот метод аутентификации работает аналогично паролю, за исключением того, что он использует LDAP в качестве метода аутентификации. LDAP используется только для проверки паролей пользователей/паролей. Поэтому пользователь должен уже существовать в базе данных до того, как LDAP может использоваться для аутентификации. Используемый сервер и параметры задаются после ключевого слова ldap в файле pg_hba.conf. Формат этого параметра:
ldap[s]://servername[:port]/base dn[;prefix[;suffix]]
Ответ 6
Теперь к концу 2017 года я могу предложить следующее:
https://www.percona.com/doc/percona-server/LATEST/management/pam_plugin.html
Percona PAM Authentication Plugin - это бесплатная и открытая реализация плагина аутентификации MySQL. Этот плагин действует как посредник между сервером MySQL, клиентом MySQL и стеком PAM. Плагин сервера запрашивает аутентификацию из стека PAM, пересылает любые запросы и сообщения из стека PAM по сети клиенту (в открытом тексте) и считывает все ответы для стека PAM.
Это НЕ проверено, я еще не знаю, насколько это хорошо.
Ответ 7
Я лично не могу найти какую-либо информацию, которая предполагает, что это возможно. Все, что я вижу, это использование MySQL в качестве хранилища данных для каталога LDAP.
Ответ 8
Это определенно возможно. Смотрите здесь: https://www.percona.com/blog/2017/04/21/how-to-setup-and-troubleshoot-percona-pam-with-ldap-for-external-authentication/
В моей среде я не настраивал Samba или NSS/SSS и не присоединяюсь к домену Windows. Я просто рассматриваю сервер AD как конечную точку LDAP. Итак, я начал с шага 9 в вышеуказанных направлениях.
РЕДАКТИРОВАТЬ: Добавить инструкции из вышеупомянутой ссылки, как предложено AfroThundr
Установите плагин Percona PAM:
mysql> INSTALL PLUGIN auth_pam SONAME 'auth_pam.so';
Query OK, 0 rows affected (0.01 sec)
mysql> INSTALL PLUGIN auth_pam_compat SONAME 'auth_pam_compat.so';
Query OK, 0 rows affected (0.00 sec)
Настройте Percona PAM для аутентификации в LDAP, создав /etc/pam.d/mysqld со следующим содержимым:
auth required pam_ldap.so
account required pam_ldap.so
Создайте пользователя MySQL, который будет проходить аутентификацию через auth_pam:
mysql> CREATE USER [email protected]'%' IDENTIFIED WITH auth_pam;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON testdb.* TO [email protected]'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
Войдите как этот пользователь и проверьте гранты:
[[email protected] ~]# mysql -u user
Password: <your LDAP/AD password>
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 22
Server version: 5.7.17-13 Percona Server (GPL), Release 13, Revision fd33d43
Copyright (c) 2009-2016 Percona LLC and/or its affiliates
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> SHOW GRANTS;
+-----------------------------------------------------+
| Grants for [email protected]% |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'%' |
| GRANT ALL PRIVILEGES ON 'testdb'.* TO 'user'@'%' |
+---------------------------------------------------
Также остерегайтесь AppArmor - он заблокирует попытку авторизации. Вы можете увидеть вводящие в заблуждение сообщения об ошибках в /var/log/auth.log
:
Feb 12 13:37:36 mysqld[15164]: PAM _pam_init_handlers: no default config /etc/pam.d/other
Feb 12 13:37:36 mysqld[15164]: PAM error reading PAM configuration file
Feb 12 13:37:36 mysqld[15164]: PAM pam_start: failed to initialize handlers
Вам нужно добавить следующее в /etc/apparmor.d/local/usr.sbin.mysqld
:
#include <abstractions/authentication>
и перезагрузите apparmor:
service apparmor restart
(Спасибо https://bugs.launchpad.net/ubuntu/+source/squid/+bug/1608984 за то, что привели меня к части AppArmor)
Ответ 9
Теперь, когда прошло уже десять лет с момента первоначальной публикации, ответ, наконец, положительный - существует официальный метод подключения LDAP для MySQL. Однако для этого требуется, чтобы вы работали с версиями MySQL Enterprise Edition или MySQL Cluster CGE.
MySQL Enterprise Аутентификация
Доступно только в некоторых коммерческих версиях
MySQL Enterprise Edition предоставляет готовые к использованию внешние модули аутентификации для простой интеграции существующих инфраструктур безопасности, включая подключаемые модули аутентификации Linux (PAM) и Windows Active Directory. Аутентифицируя пользователей MySQL из централизованных каталогов, организации могут внедрять систему единого входа. Могут быть использованы те же имена пользователей, пароли и разрешения. Это повышает эффективность работы администраторов баз данных MySQL, устраняя необходимость управления учетными данными в отдельных системах. Это также делает ИТ-инфраструктуры более безопасными, используя существующие правила и процессы безопасности (например, выявление слабых паролей и управление сроком действия паролей).
Пользователи MySQL могут проходить проверку подлинности с использованием PAM или собственных служб ОС Windows.
- Внешняя аутентификация MySQL для PAM - позволяет настроить MySQL для использования Linux PAM (подключаемых модулей аутентификации) для аутентификации пользователей через PAM для различных методов аутентификации, таких как пароли Linux или каталог LDAP.
- Внешняя аутентификация MySQL для Windows - позволяет настроить MySQL для использования собственных служб Windows для аутентификации клиентских подключений. Пользователи, вошедшие в Windows, могут подключаться из клиентских программ MySQL к серверу на основе информации токена в своей среде без указания дополнительного пароля.
- Новый! Внешняя аутентификация MySQL для LDAP - позволяет настроить MySQL для аутентификации пользователей через серверы LDAP (Lightweight Directory Access Protocol). Пользователи или группы пользователей могут быть указаны
подробно через спецификации LDAP. Имя пользователя/пароль и SASL
аутентификация поддерживаются.