私は、ユーザーがLDAPを使用してMySQLデータベース(実際には多くの場合)で認証できるようにする計画を考え出そうとしています。具体的には、ActiveDirectory。データベースには、Webではなくアプリケーションを介してアクセスする可能性があります。私のオプションは何ですか?
編集:
OK。 LDAPを使用してMySQLで認証を許可する「公式の」方法はないようです。他にどのようなオプションがありますか? LDAPユーザーとパスワードをMySQLユーザーテーブルに同期できますか?
これは、mysqlプロキシで可能です。これを機能させるために知っておくべきことがいくつかあります。
これらの2つのページは、始めるのに役立ちます。
Infoscope Hellas L.P.がGPLで提供するauth_ldapプラグインを使用できます。
それはsourceforgeからダウンロードできます: http://sourceforge.net/projects/mysqlauthldap/
ホームページ: http://infoscope.gr/mysqlauthldap
プラグインはまだベータ版であり、UNIXインストールでのみ機能します。
https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-7.html を見てください
これは5.5.7リリース候補です
これは、現在、市販の拡張機能で可能です。 MySQL外部認証for Windows :
これにより、ネイティブWindowsサービスを使用してクライアント接続を認証するようにMySQLを構成できます。 Windowsにログインしたユーザーは、追加のパスワードを指定しなくても、環境内のトークン情報に基づいてMySQLクライアントプログラムからサーバーに接続できます。
2017年末までに、これを提案できます。
https://www.percona.com/doc/percona-server/LATEST/security/pam_plugin.html#pam-plugin
Percona PAM認証プラグインは、MySQLの認証プラグインの無料のオープンソース実装です。このプラグインは、MySQLサーバー、MySQLクライアント、PAMスタックの間のメディエーターとして機能します。サーバープラグインはPAMスタックから認証を要求し、PAMスタックからの要求とメッセージを(クリアテキストで)ワイヤーを介してクライアントに転送し、PAMスタックに対する応答を読み取ります。
[〜#〜]テストされていません[〜#〜]テスト済みですが、どれほど良いかはまだわかりません。
PostgreSQL を使用できますか?
この認証方法は、認証方法としてLDAPを使用することを除いて、パスワードと同様に機能します。 LDAPは、ユーザー名とパスワードのペアを検証するためにのみ使用されます。したがって、LDAPを認証に使用するには、ユーザーがデータベースにすでに存在している必要があります。使用するサーバーとパラメーターは、pg_hba.confファイルのLDAPキーWordの後に指定します。このパラメーターの形式は次のとおりです。
ldap[s]://servername[:port]/base dn[;prefix[;suffix]]
PHPでLDAP認証を取得しようとしていたか、PHPでLDAP認証を取得しようとしていましたが、phpmysql以降では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;
現在php_authでpam_authを使用できないことに注意してください。それには以下を返すバグがあります:
The server requested authentication method unknown to the client
私は個人的にこれが可能であると示唆する情報を見つけることができません。 LDAPディレクトリのデータストアとしてMySQLを使用しているだけです。
これは間違いなく可能です。ここを参照: https://www.percona.com/blog/2017/04/21/how-to-setup-and-troubleshoot-percona-pam-with-ldap-for-external-認証/
私の環境では、SambaもNSS/SSSもセットアップしておらず、Windowsドメインに参加していません。 ADサーバーをLDAPエンドポイントとして扱います。そこで、上記の手順9から始めました。
EDIT: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を作成して、LDAPに対して認証するようにPercona PAMを構成します。
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 <abstractions/authentication>
そしてapparmorをリロードします:
service apparmor restart
( のおかげで、https://bugs.launchpad.net/ubuntu/+source/squid/+bug/1608984 をAppArmorの部分に導いてくれてありがとう)
元の投稿から10年が経過しました。MySQLの正式なLDAP接続方法があるため、答えは最終的にはいです。ただし、MySQL Enterprise EditionまたはMySQL Cluster CGEバージョンを実行している必要があります。
一部の商用版でのみ利用可能
MySQL Enterprise Editionは、Linux Pluggable Authentication Modules(PAM)やWindows Active Directoryなどの既存のセキュリティインフラストラクチャを簡単に統合するための、すぐに使用できる外部認証モジュールを提供します。一元化されたディレクトリからMySQLユーザーを認証することにより、組織はシングルサインオンを実装できます。同じユーザー名、パスワード、および権限を使用できます。これにより、個々のシステムで資格情報を管理する必要がなくなるため、MySQL DBAの生産性が向上します。また、既存のセキュリティルールとプロセスを活用することで、ITインフラストラクチャのセキュリティを強化します(弱いパスワードの識別やパスワードの有効期限の管理など)。
MySQLユーザーは、PAMまたはネイティブのWindows OSサービスを使用して認証できます。
- PAMのMySQL外部認証-Linux PAM(Pluggable Authentication Modules)を使用して、PAMを介してユーザーを認証するようにMySQLを設定できます。 LinuxパスワードまたはLDAPディレクトリ。
- MySQL for Windowsの外部認証-ネイティブのWindowsサービスを使用してクライアント接続を認証するようにMySQLを設定できます。 Windowsにログインしたユーザーは、追加のパスワードを指定しなくても、環境内のトークン情報に基づいてMySQLクライアントプログラムからサーバーに接続できます。
- New!LDAPのMySQL外部認証-LDAPを介してユーザーを認証するようにMySQLを設定できます(軽量Directory Access Protocol)サーバー。ユーザーまたはユーザーのグループを指定できます
LDAP仕様による詳細。ユーザー名/パスワードとSASL
認証がサポートされています。