2009-08-25 8 views
20

Tôi đang cố gắng tìm ra kế hoạch cho phép người dùng xác thực với cơ sở dữ liệu MySQL (nhiều, thực tế) bằng LDAP. Cụ thể hơn, ActiveDirectory. Cơ sở dữ liệu có thể sẽ được truy cập thông qua các ứng dụng, chứ không phải trên web. Những lựa chọn của tôi là gì?Sử dụng LDAP (AD) để xác thực MySQL

EDIT:

Okay. Dường như không có cách "chính thức" cho phép xác thực trên MySQL bằng LDAP. Các tùy chọn khác tồn tại là gì? Chúng tôi có thể đồng bộ hóa người dùng và mật khẩu LDAP vào bảng người dùng MySQL không?

+0

Bạn đang tìm kiếm một giải pháp MySQL đúng hoặc bạn có thể tiếp cận vấn đề này từ phía ứng dụng (như trong chương trình theo cách của bạn ra khỏi vấn đề) – Hugoware

+0

Tôi không muốn chương trình theo cách của tôi ra, trừ khi tôi phải. Tôi muốn có xác thực được xử lý nguyên bản. Tôi đã nghĩ về việc "xác thực" đơn giản thông qua ứng dụng trong LDAP và tạo người dùng trong DB người dùng MySQL và liên kết chúng ... nhưng điều này yêu cầu ứng dụng phải có thông tin đăng nhập lớn với máy chủ MySQL. – snicker

+0

Proxy MySQL (như được đề cập bởi ai đó bên dưới) sẽ là lựa chọn đầu tiên của tôi –

Trả lời

9

này là có thể với proxy mysql. có một vài điều bạn cần biết để làm cho công việc này:

  • mysql proxy có thể chạy shell lệnh
  • mysql proxy có thể đánh chặn và viết lại xác thực

hai trang này sẽ giúp bạn bắt đầu:

0

Cá nhân tôi không thể tìm thấy bất kỳ thông tin nào cho thấy điều này là có thể. Tất cả những gì tôi thấy là sử dụng MySQL làm kho dữ liệu cho thư mục LDAP.

+1

Tôi đã khá nhiều trong tình huống tương tự. Đó là lý do tôi đến đây! thường tôi không đăng nếu tôi có thể tìm thấy nó với máy Google;) – snicker

1

Có vẻ như bạn areout of luck :(

bạn có thể sử dụng PostgreSQL?

phương thức xác thực này hoạt động tương tự như mật khẩu ngoại trừ việc nó sử dụng LDAP như là phương pháp xác thực. LDAP chỉ được sử dụng để xác nhận Do đó người dùng phải đã tồn tại trong cơ sở dữ liệu trước khi LDAP có thể được sử dụng để xác thực Máy chủ và các tham số được sử dụng được chỉ định sau từ khóa chính ldap trong tệp pg_hba.conf. Định dạng của tham số này là:

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

+0

PostgreSQL có thể là một tùy chọn. Tôi chưa triển khai và hiện đang trong giai đoạn lập kế hoạch ... điều tốt tôi phát hiện ra trước khi triển khai MySQL cho giải pháp và phải lo lắng về việc di chuyển dữ liệu. Cám ơn vì cái này. – snicker

6

Hãy nhìn vào http://dev.mysql.com/doc/refman/5.5/en/news-5-5-7.html

này nằm trong ứng cử viên 5.5.7 phát hành

+1

Phải, nhưng trong khi có hỗ trợ ngay bây giờ trong MySQL cho phép các mô-đun xác thực có thể cắm được, thì không có bất kỳ mô đun thực tế nào, đúng không? Vì vậy, tôi không thể thiết lập để xác thực đối với Windows hoặc LDAP hoặc NIS cho đến khi ai đó viết những thứ đó, theo như tôi hiểu ... – GregW

+1

Vẫn còn một chút bùng binh, nhưng nếu bạn có thiết lập PAM-LDAP, bạn có thể sử dụng được viết [plugin PAM] (http://dev.mysql.com/doc/refman/5.5/en/pam-authentication-plugin.html). – quickshiftin

4

Điều này có thể ngay bây giờ với các phần mở rộng thương mại, ví dụ với MySQL External Authentication for Windows:

Điều này cho phép bạn định cấu hình MySQL để sử dụng các dịch vụ Windows gốc để xác thực kết nối máy khách. Người dùng đã đăng nhập vào Windows có thể kết nối từ chương trình máy khách MySQL đến máy chủ dựa trên thông tin mã thông báo trong môi trường của họ mà không chỉ định mật khẩu bổ sung.

1

Bây giờ vào cuối năm 2017, tôi có thể đề nghị này:

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

Percona PAM xác thực Plugin là một việc thực hiện nguồn mở miễn phí plugin xác thực của MySQL. Plugin này hoạt động như một trung gian hòa giải giữa máy chủ MySQL, máy khách MySQL và ngăn xếp PAM. Plugin máy chủ yêu cầu xác thực từ ngăn xếp PAM, chuyển tiếp mọi yêu cầu và thư từ ngăn xếp PAM qua dây tới máy khách (trong văn bản rõ ràng) và đọc lại bất kỳ câu trả lời nào cho ngăn xếp PAM.

Đó là NOT đã kiểm tra, tôi chưa biết nó tốt đến mức nào.

0

Điều này chắc chắn có thể xảy ra. Xem tại đây: https://www.percona.com/blog/2017/04/21/how-to-setup-and-troubleshoot-percona-pam-with-ldap-for-external-authentication/

Trong môi trường của tôi, tôi không thiết lập Samba hoặc NSS/SSS và tôi không tham gia miền cửa sổ. Tôi chỉ coi máy chủ AD là điểm cuối LDAP. Vì vậy, tôi bắt đầu từ Bước 9 theo các hướng dẫn trên.

EDIT: Thêm hướng dẫn từ trên cao liên kết theo đề nghị của AfroThundr

Cài đặt 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) 

Configure Percona PAM để xác thực để LDAP bằng cách tạo /etc/pam.d/ mysqld với nội dung này:

auth required pam_ldap.so 
account required pam_ldap.so 

Tạo người dùng MySQL sẽ xác thực qua 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) 

Đăng nhập như người dùng này và kiểm tra tài trợ:

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

Cũng hãy cẩn thận của AppArmor - nó sẽ chặn các nỗ lực auth.Bạn có thể thấy sai lệch các thông báo lỗi trong /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 

Bạn cần phải thêm dòng sau vào /etc/apparmor.d/local/usr.sbin.mysqld:

#include <abstractions/authentication>

và tải lại AppArmor:

service apparmor restart

(Nhờ https://bugs.launchpad.net/ubuntu/+source/squid/+bug/1608984 để dẫn tôi đến phần AppArmor)

+0

Thay vì chỉ đăng liên kết đó, bạn có thể đăng các phần liên quan trong câu trả lời của mình. Điều này tạo ra một câu trả lời hoàn chỉnh hơn và đảm bảo câu trả lời của bạn vẫn có liên quan nếu liên kết đó bị hỏng. – AfroThundr