【问题标题】:Using LDAP (AD) for MySQL authentication使用 LDAP (AD) 进行 MySQL 身份验证
【发布时间】:2009-08-25 18:07:10
【问题描述】:

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

编辑:

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

【问题讨论】:

  • 您是在寻找严格的 MySQL 解决方案,还是可以从应用程序端解决这个问题(如在程序中解决问题)
  • 除非必须,否则我宁愿不要编程。我更喜欢本地处理身份验证。我曾考虑过简单地通过 LDAP 中的应用程序“验证”并在 MySQL 用户数据库中创建用户并链接它们......但这需要应用程序具有与 MySQL 服务器的大凭据。
  • MySQL 代理(下面有人提到)将是我的首选

标签: mysql authentication active-directory ldap


【解决方案1】:

这可以通过 mysql 代理实现。要完成这项工作,您需要了解以下几点:

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

这两个页​​面将帮助您入门:

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 对,但是虽然 MySQL 现在支持可插入的身份验证模块,但实际上并没有任何模块,对吧?因此,据我所知,在有人编写这些内容之前,我无法将其设置为针对 Windows、LDAP 或 NIS 进行身份验证...
      • 还是有点绕,但是如果你有 PAM-LDAP 设置你可以使用已经写好的PAM plugin
      【解决方案4】:

      现在可以通过商业扩展来实现,例如MySQL External Authentication for Windows:

      这使您能够将 MySQL 配置为使用本机 Windows 服务来验证客户端连接。已登录 Windows 的用户可以根据其环境中的令牌信息从 MySQL 客户端程序连接到服务器,而无需指定额外的密码。

      【讨论】:

        【解决方案5】:

        好像你areout of luck:(

        你能用PostgreSQL吗?

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

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

        【讨论】:

        • PostgreSQL 可能是一个选项。我还没有部署,目前正处于规划阶段......在为解决方案实施 MySQL 之前我发现了一件好事,并且不得不担心数据迁移。谢谢你。
        【解决方案6】:

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

        https://www.percona.com/doc/percona-server/LATEST/security/pam_plugin.html#pam-plugin

        Percona PAM 身份验证插件是 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)
          

          通过使用以下内容创建 /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 - 它会阻止身份验证尝试。您可能会在/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 &lt;abstractions/authentication&gt;

          并重新加载apparmor:

          service apparmor restart

          (感谢https://bugs.launchpad.net/ubuntu/+source/squid/+bug/1608984 引导我进入 AppArmor 部分)

          【讨论】:

          • 您可以在答案中发布相关部分,而不仅仅是发布该链接。这将创建一个更完整的答案,并确保您的答案在该链接断开时仍然相关。
          【解决方案9】:

          现在距离最初的帖子已有十年了,答案终于是肯定的,MySQL 有一个官方的 LDAP 连接方法。但是,它确实要求您运行 MySQL Enterprise Edition 或 MySQL Cluster CGE 版本。

          MySQL Enterprise Authentication

          仅在特定商业版中可用

          MySQL 企业版提供即用型外部身份验证 轻松集成现有安全基础设施的模块, 包括 Linux 可插入身份验证模块 (PAM) 和 Windows 活动目录。通过从集中验证 MySQL 用户 目录,组织可以实施单点登录。同一个用户 可以使用名称、密码和权限。这使得 MySQL DBA 通过消除管理凭据的需要来提高生产力 个别系统。它还通过以下方式使 IT 基础架构更加安全 利用现有的安全规则和流程(例如识别 弱密码和管理密码过期)。

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

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

          【讨论】:

            【解决方案10】:

            对于那些仍然像我一样遇到问题或尝试使用 PHP 进行 LDAP 身份验证的人,似乎不再支持 php 7+ libmysqlclient,因此您需要将 mysql 客户端库 mysqlnd 与您的 php 配置一起使用,并且验证它是否包含明文密码插件,如下所示。

            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;
            

            请注意,您目前不能将 pam_auth 与 php 7 一起使用,其中有一个错误会返回:

            The server requested authentication method unknown to the client

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

            【讨论】:

              猜你喜欢
              • 2014-08-09
              • 2016-07-17
              • 2014-02-28
              • 1970-01-01
              • 2015-10-03
              • 2014-03-08
              • 2011-07-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多