2009-08-25 6 views
20

sto cercando di elaborare un piano per consentire agli utenti di Auth con un database MySQL (molti, in realtà) tramite LDAP. Più specificamente, ActiveDirectory. Il database sarà probabilmente accessibile attraverso le applicazioni, non il web. Quali sono le mie opzioni?Utilizzo di LDAP (AD) per l'autenticazione MySQL

EDIT:

Va bene. Sembra che non ci sia un modo "ufficiale" per consentire l'autenticazione su MySQL usando LDAP. Quali altre opzioni esistono? Possiamo sincronizzare utenti e password LDAP con la tabella utente MySQL?

+0

Sei alla ricerca di una soluzione rigorosamente MySQL o puoi affrontare questo problema dal lato dell'applicazione (come nel programma l'uscita dal problema) – Hugoware

+0

Preferisco non programmare la mia uscita a meno che non sia necessario. Preferirei che l'autenticazione fosse gestita in modo nativo. Ho pensato semplicemente a "autenticare" tramite l'app in LDAP e creare utenti nel DB degli utenti MySQL e collegarli ... ma ciò richiede che l'app abbia grandi credenziali con il server MySQL. – snicker

+0

Il proxy MySQL (come menzionato da qualcuno sotto) sarebbe la mia prima scelta –

risposta

9

questo è possibile con delega mysql. ci sono alcune cose che dovete sapere per fare questo lavoro:

  • delega mysql in grado di eseguire comandi della shell
  • mysql proxy può intercettare e riscrivere l'autenticazione

queste due pagine vi aiuterà a iniziare:

0

Io personalmente non riesce a trovare alcuna informazione che suggerisce che questo è possibile. Tutto quello che vedo è usare MySQL come archivio dati per la directory LDAP.

+1

Sono stato più o meno nella stessa situazione. Ecco perché sono venuto qui! di solito non pubblico se riesco a trovarlo con la macchina di Google;) – snicker

1

sembra che tu areout of luck :(

Potresti usare PostgreSQL?

Questo metodo di autenticazione funziona in modo simile a una password, tranne che utilizza LDAP come metodo di autenticazione. LDAP viene utilizzato solo per convalidare la . Pertanto l'utente deve già esistere utente coppie nome/password nel database prima LDAP può essere utilizzato per l'autenticazione il server ei parametri utilizzati sono specificate dopo la parola chiave LDAP nel file pg_hba.conf il formato di questo parametro è:..

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

+0

PostgreSQL può essere un'opzione. Non ho ancora implementato e sono attualmente in fase di pianificazione ... buona cosa ho scoperto prima di implementare MySQL per la soluzione e dovermi preoccupare della migrazione dei dati. Grazie per questo. – snicker

6

prega guarda http://dev.mysql.com/doc/refman/5.5/en/news-5-5-7.html

Questo è nel candidato 5.5.7 rilascio

+1

Giusto, ma mentre in MySQL c'è il supporto per i moduli di autenticazione collegabili, non ci sono moduli reali, giusto? Quindi non posso configurarlo per autenticare Windows o LDAP o NIS fino a quando qualcuno non lo scrive, per quanto ho capito ... – GregW

+1

È ancora un po 'rotonda, ma se hai l'installazione PAM-LDAP potresti usare già scritto [plugin PAM] (http://dev.mysql.com/doc/refman/5.5/en/pam-authentication-plugin.html). – quickshiftin

4

Questo è possibile ora con le estensioni commerciali, per esempio con MySQL External Authentication for Windows:

Ciò consente di configurare MySQL per utilizzare i servizi nativi di Windows per autenticare le connessioni client. Gli utenti che si sono collegati a Windows possono connettersi da MySQL programmi client al server in base alle informazioni del token nel loro ambiente senza specificare una password aggiuntiva.

1

Ora entro la fine del 2017, posso suggerire questo:

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

Percona PAM plugin è un'implementazione gratuito e Open Source del plugin di autenticazione del MySQL. Questo plugin funge da mediatore tra il server MySQL, il client MySQL e lo stack PAM. Il plug-in del server richiede l'autenticazione dallo stack PAM, inoltra eventuali richieste e messaggi dallo stack PAM sul cavo al client (in chiaro) e legge eventuali risposte per lo stack PAM.

È NON testato, non so ancora quanto è buono.

0

Questo è sicuramente possibile. Vedi qui: https://www.percona.com/blog/2017/04/21/how-to-setup-and-troubleshoot-percona-pam-with-ldap-for-external-authentication/

Nel mio ambiente, non ho configurato Samba o NSS/SSS e non mi sono unito al dominio di Windows. Tratto semplicemente il server AD come endpoint LDAP. Quindi ho iniziato dal passaggio 9 nelle direzioni sopra.

EDIT: aggiungere istruzioni dall'alto collegamento come suggerito da AfroThundr

Installare il 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) 

Configura Percona PAM per l'autenticazione LDAP con la creazione di /etc/pam.d/ mysqld con questo contenuto:

auth required pam_ldap.so 
account required pam_ldap.so 

Creare un utente MySQL che l'autenticazione tramite 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) 

login come questo utente e controllare sovvenzioni:

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

attenzione anche di AppArmor - bloccherà il tentativo di autenticazione.Si può visualizzare messaggi di errore fuorvianti in /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 

è necessario aggiungere quanto segue a /etc/apparmor.d/local/usr.sbin.mysqld:

#include <abstractions/authentication>

e ricaricare AppArmor:

service apparmor restart

(Grazie a https://bugs.launchpad.net/ubuntu/+source/squid/+bug/1608984 per avermi condotto alla parte AppArmor)

+0

Invece di postare quel link, potresti inserire le parti rilevanti nella tua risposta. Ciò crea una risposta più completa e garantisce che la tua risposta sia ancora pertinente se il collegamento si interrompe. – AfroThundr