2009-08-25 46 views
20

Estoy tratando de llegar a un plan para permitir a los usuarios autenticar con una base de datos MySQL (muchos, en realidad) usando LDAP. Más específicamente, ActiveDirectory. Se accederá a la base de datos a través de aplicaciones, no de la web. ¿Cuáles son mis opciones?Uso de LDAP (AD) para la autenticación de MySQL

EDIT:

bien. Parece que no hay una forma "oficial" de permitir la autenticación en MySQL usando LDAP. ¿Qué otras opciones existen? ¿Podemos sincronizar usuarios LDAP y contraseñas con la tabla de usuarios de MySQL?

+0

¿Está buscando una solución estrictamente MySQL o puede abordar este problema desde el lado de la aplicación (como en el programa para salir del problema) – Hugoware

+0

Prefiero no programar mi salida a menos que sea necesario. Prefiero que la autenticación se maneje de forma nativa. He pensado en simplemente "autenticar" a través de la aplicación en LDAP y crear usuarios en la base de datos de usuarios de MySQL y vincularlos ... pero esto requiere que la aplicación tenga grandes credenciales con el servidor MySQL. – snicker

+0

El proxy MySQL (mencionado por alguien más abajo) sería mi primera opción –

Respuesta

9

esto es posible con proxy de MySQL. hay algunas cosas que hay que saber para hacer este trabajo:

  • proxy de MySQL puede ejecutar comandos de shell
  • mysql proxy puede interceptar y reescribir la autenticación

estas dos páginas le ayudará a empezar:

0

Personalmente, no encuentro ninguna información que sugiera que esto sea posible. Todo lo que veo es utilizar MySQL como el almacén de datos para el directorio LDAP.

+1

He estado prácticamente en la misma situación. ¡Por eso vine aquí! generalmente no publico si puedo encontrarlo con la máquina de Google;) – snicker

1

parece que areout of luck :(

Podría utilizar PostgreSQL?

Este método de autenticación funciona de manera similar a una contraseña excepto que utiliza LDAP como método de autenticación. LDAP sólo se utiliza para validar la nombre de usuario/pares de contraseñas. Por lo tanto, el usuario ya debe existir en la base de datos antes de que LDAP pueda utilizarse para la autenticación. El servidor y los parámetros utilizados se especifican después de la palabra clave ldap en el archivo pg_hba.conf. El formato de este parámetro es:

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

+0

PostgreSQL puede ser una opción. Todavía no me he implementado y actualmente estoy en las etapas de planificación ... Lo bueno es que descubrí antes de implementar MySQL para la solución y tener que preocuparme por la migración de datos. Gracias por esto. – snicker

6

Por favor, mira a http://dev.mysql.com/doc/refman/5.5/en/news-5-5-7.html

Esto está en el candidato 5.5.7 liberación

+1

Correcto, pero si bien ahora hay soporte en MySQL que permite módulos de autenticación conectables, no hay ningún módulo real, ¿verdad? Así que no puedo configurar esto para autenticarme contra Windows o LDAP o NIS hasta que alguien los escriba, por lo que yo entiendo ... – GregW

+1

Todavía es un poco indirecto, pero si tienes la configuración de PAM-LDAP, podrías usar el escrito [PAM plugin] (http://dev.mysql.com/doc/refman/5.5/en/pam-authentication-plugin.html). – quickshiftin

4

Esto es posible ahora con extensiones comerciales, por ejemplo, con MySQL External Authentication for Windows:

Esto le permite configurar MySQL para usar servicios nativos de Windows para autenticar conexiones de clientes. Los usuarios que han iniciado sesión en Windows pueden conectarse desde los programas cliente de MySQL al servidor según la información del token en su entorno sin especificar una contraseña adicional.

1

ahora a finales de 2017, lo que puedo proponer esto:

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

Percona PAM Autenticación Plugin es una aplicación gratuita y de código abierto del complemento de autenticación del MySQL. Este complemento actúa como mediador entre el servidor MySQL, el cliente MySQL y la pila PAM. El complemento del servidor solicita autenticación de la pila PAM, reenvía todas las solicitudes y mensajes de la pila PAM a través del cable al cliente (en texto claro) y lee todas las respuestas para la pila PAM.

Es NO probado, no sé todavía lo bueno que es.

0

Esto es definitivamente posible. Vea aquí: https://www.percona.com/blog/2017/04/21/how-to-setup-and-troubleshoot-percona-pam-with-ldap-for-external-authentication/

En mi entorno, no configuré Samba o NSS/SSS y no me uno al dominio de Windows. Simplemente trato al servidor AD como un punto final LDAP. Así que comencé desde el paso 9 en las instrucciones anteriores.

EDIT: añadir instrucciones desde arriba enlace como sugerido por AfroThundr

Instalar el plugin 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) 

Configurar Percona PAM para autenticar a LDAP mediante la creación de /etc/pam.d/ mysqld con el siguiente contenido:

auth required pam_ldap.so 
account required pam_ldap.so 

Crear un usuario MySQL que la autenticación a través 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) 

Iniciar sesión como este usuario y comprobar subvenciones:

[[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'@'%' | 
+--------------------------------------------------- 

También tenga cuidado de AppArmor - que bloqueará el intento de autenticación.Es posible que vea engañosos mensajes de error en /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 

es necesario agregar lo siguiente a /etc/apparmor.d/local/usr.sbin.mysqld:

#include <abstractions/authentication>

y volver a cargar apparmor:

service apparmor restart

(Gracias a https://bugs.launchpad.net/ubuntu/+source/squid/+bug/1608984 por llevarme a la parte de AppArmor)

+0

En lugar de simplemente publicar ese enlace, puede publicar las partes relevantes en su respuesta. Esto crea una respuesta más completa y aseguraría que su respuesta siga siendo relevante si ese enlace se rompe alguna vez. – AfroThundr

Cuestiones relacionadas