代码之家  ›  专栏  ›  技术社区  ›  snicker

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

  •  21
  • snicker  · 技术社区  · 15 年前

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

    编辑:

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

    9 回复  |  直到 6 年前
        1
  •  9
  •   Thomas BDX alecxe    9 年前

    这可以通过MySQL代理实现。要使这项工作成功,您需要知道以下几点:

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

    这两页将帮助您开始:

        2
  •  8
  •   Charalampos Serenis    12 年前

    您可以使用由infoscope hellas l.p.在gpl下提供的auth_ldap插件。

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

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

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

        3
  •  6
  •   Dave Stokes    14 年前
        4
  •  4
  •   PeeHaa    13 年前

    这在商业扩展中是可能的,例如 MySQL External Authentication for Windows :

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

        5
  •  1
  •   Esteban Küber    15 年前

    看起来像你 are out of luck :(

    你能用吗? PostgreSQL ?

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

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

        6
  •  1
  •   Mohammed Noureldin Reedwanul Islam    7 年前

    到2017年底,我可以提出以下建议:

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

    PerconaPAM认证插件是mysqls认证插件的免费开源实现。这个插件充当mysql服务器、mysql客户机和pam堆栈之间的中介。服务器插件从PAM堆栈请求身份验证,将PAM堆栈的任何请求和消息通过导线转发到客户端(明文),并读取PAM堆栈的任何回复。

    它是 不是 经过测试,我还不知道它有多好。

        7
  •  0
  •   Robert Rouse    15 年前

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

        8
  •  0
  •   z0lo    7 年前

    这绝对是可能的。请参见这里: 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以通过创建/etc/pam.d/mysqld对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 把我带到最深处)

        9
  •  0
  •   brentil    6 年前

    现在已经有十年了,从最初的帖子开始,最终的答案是肯定的,因为MySQL有一个官方的LDAP连接方法。但是,它确实要求您运行mysql企业版或mysql cluster cge版本。

    MySQL Enterprise Authentication

    仅适用于部分商业版本

    mysql企业版提供了随时可用的外部认证 可轻松集成现有安全基础设施的模块, 包括Linux可插拔身份验证模块(PAM)和Windows Active Directory。通过从集中式 目录、组织可以实现单点登录。同一用户 可以使用名称、密码和权限。这使得MySQL DBA 通过消除在 单个系统。它还通过 利用现有的安全规则和流程(例如识别 弱密码和管理密码过期)。

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

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