使用LDAP(AD)进行MySQL身份验证

时间:2009-08-25 18:07:11

标签: mysql authentication active-directory ldap

我正在尝试制定计划,允许用户使用LDAP使用MySQL数据库(实际上很多)进行身份验证。更具体地说,ActiveDirectory。数据库可能会通过应用程序而不是网络访问。我有什么选择?

修改

即可。似乎没有“官方”方式允许使用LDAP在MySQL上进行身份验证。还有哪些其他选择?我们可以将LDAP用户和密码同步到MySQL用户表吗?

9 个答案:

答案 0 :(得分:9)

这可以使用mysql代理。要完成这项工作,您需要了解一些事项:

  • mysql代理可以执行shell命令
  • mysql代理可以拦截和重写身份验证

这两页将帮助您入门:

答案 1 :(得分:8)

您可以使用Infoscope Hellas L.P.在GPL下提供的auth_ldap插件。

可以从sourceforge下载: http://sourceforge.net/projects/mysqlauthldap/

主页: http://infoscope.gr/mysqlauthldap

该插件仍然是Beta版,仅适用于UNIX安装。

答案 2 :(得分:6)

答案 3 :(得分:1)

好像你are out of luck :(

您可以使用PostgreSQL吗?

  

此身份验证方法与密码类似,只是它使用LDAP作为身份验证方法。 LDAP仅用于验证用户名/密码对。因此,在LDAP可用于身份验证之前,用户必须已存在于数据库中。使用的服务器和参数在文件pg_hba.conf中的ldap关键字之后指定。此参数的格式为:

     

ldap[s]://servername[:port]/base dn[;prefix[;suffix]]

答案 4 :(得分:1)

现在到2017年底,我可以建议:

https://www.percona.com/doc/percona-server/LATEST/management/pam_plugin.html

  

Percona PAM Authentication Plugin是MySQL认证插件的免费开源实现。此插件充当MySQL服务器,MySQL客户端和PAM堆栈之间的中介。服务器插件从PAM堆栈请求身份验证,通过线路将任何来自PAM堆栈的请求和消息转发到客户端(以明文形式),并回读PAM堆栈的任何回复。

NOT 测试,我不知道它有多好。

答案 5 :(得分:0)

我个人找不到任何暗示这是可能的信息。我所看到的只是使用MySQL作为LDAP目录的数据存储。

答案 6 :(得分:0)

这绝对是可能的。见这里: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)

通过使用以下内容创建/etc/pam.d/mysqld,将Percona PAM配置为对LDAP进行身份验证:

auth required pam_ldap.so
account required pam_ldap.so

创建一个将通过auth_pam进行身份验证的MySQL用户:

mysql> CREATE USER user@'%' IDENTIFIED WITH auth_pam;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON testdb.* TO user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

以此用户身份登录并检查授权:

[root@ps-20 ~]# 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 user@%                                 |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'%'                  |
| GRANT ALL PRIVILEGES ON `testdb`.* TO 'user'@'%' |
+---------------------------------------------------

还要注意AppArmor - 它会阻止auth尝试。您可能会在/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部分)

答案 7 :(得分:0)

现在距离原始文章已经十年了,对于MySQL的官方LDAP连接方法,答案终于是肯定的。但是,它确实需要您运行MySQL企业版或MySQL Cluster CGE版本。

MySQL Enterprise Authentication

  

仅在部分商业版本中可用

     

MySQL Enterprise Edition提供了随时可以使用的外部身份验证   轻松集成现有安全基础架构的模块,   包括Linux可插拔身份验证模块(PAM)和Windows   活动目录。通过从集中验证MySQL用户   目录,组织可以实现单一登录。同一用户   可以使用名称,密码和权限。这使得MySQL DBA   通过消除管理凭证的必要性来提高生产力   单个系统。它还使IT基础架构更加安全   利用现有的安全规则和流程(例如,确定   弱密码和管理密码过期)。

     

可以使用PAM或本机Windows OS对MySQL用户进行身份验证   服务。

     
      
  • PAM的MySQL外部身份验证-使您能够配置MySQL以使用Linux PAM(可插入身份验证   模块)以通过PAM对用户进行身份验证以进行各种身份验证   方法,例如Linux密码或LDAP目录。
  •   
  • 用于Windows的MySQL外部身份验证-使您能够配置MySQL以使用本机Windows服务进行身份验证   客户连接。登录到Windows的用户可以连接   从MySQL客户端程序到基于令牌的服务器   环境中的信息,而无需指定其他信息   密码。
  •   
  • 新功能! LDAP的MySQL外部身份验证-使您可以配置MySQL以通过LDAP(轻型目录)对用户进行身份验证   访问协议)服务器。可以指定用户或用户组
      通过LDAP规范进行详细说明。用户名/密码和SASL
      支持身份验证。
  •   

答案 8 :(得分:0)

对于那些仍然像我曾经遇到过此类问题或试图通过PHP获得LDAP身份验证的问题,似乎不再支持php 7+ libmysqlclient,因此您需要在php配置中使用mysql客户端库mysqlnd和确认它包含如下所示的明文密码插件。

php mysqlnd 加载的插件mysqlnd,debug_trace,auth_plugin_mysql_native_password, auth_plugin_mysql_clear_password ,auth_plugin_sha256_password

然后通过运行以下命令来使用auth_pam_compat来安装插件并创建要认证的每个用户。

mysql> INSTALL PLUGIN auth_pam_compat SONAME 'auth_pam_compat.so';
mysql> CREATE USER testaduser IDENTIFIED WITH auth_pam_compat;

请注意,当前您无法在php 7上使用pam_auth,其中有一个错误返回:

The server requested authentication method unknown to the client

https://bugs.php.net/bug.php?id=75645