web-dev-qa-db-ja.com

MySQL認証にLDAP(AD)を使用する

私は、ユーザーがLDAPを使用してMySQLデータベース(実際には多くの場合)で認証できるようにする計画を考え出そうとしています。具体的には、ActiveDirectory。データベースには、Webではなくアプリケーションを介してアクセスする可能性があります。私のオプションは何ですか?

編集:

OK。 LDAPを使用してMySQLで認証を許可する「公式の」方法はないようです。他にどのようなオプションがありますか? LDAPユーザーとパスワードをMySQLユーザーテーブルに同期できますか?

23
snicker

これは、mysqlプロキシで可能です。これを機能させるために知っておくべきことがいくつかあります。

  • mysqlプロキシはシェルコマンドを実行できます
  • mysqlプロキシは認証を傍受して書き換えることができます

これらの2つのページは、始めるのに役立ちます。

9
longneck

Infoscope Hellas L.P.がGPLで提供するauth_ldapプラグインを使用できます。

それはsourceforgeからダウンロードできます: http://sourceforge.net/projects/mysqlauthldap/

ホームページ: http://infoscope.gr/mysqlauthldap

プラグインはまだベータ版であり、UNIXインストールでのみ機能します。

8

https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-7.html を見てください

これは5.5.7リリース候補です

6
Dave Stokes

これは、現在、市販の拡張機能で可能です。 MySQL外部認証for Windows

これにより、ネイティブWindowsサービスを使用してクライアント接続を認証するようにMySQLを構成できます。 Windowsにログインしたユーザーは、追加のパスワードを指定しなくても、環境内のトークン情報に基づいてMySQLクライアントプログラムからサーバーに接続できます。

4
alastori

2017年末までに、これを提案できます。

https://www.percona.com/doc/percona-server/LATEST/security/pam_plugin.html#pam-plugin

Percona PAM認証プラグインは、MySQLの認証プラグインの無料のオープンソース実装です。このプラグインは、MySQLサーバー、MySQLクライアント、PAMスタックの間のメディエーターとして機能します。サーバープラグインはPAMスタックから認証を要求し、PAMスタックからの要求とメッセージを(クリアテキストで)ワイヤーを介してクライアントに転送し、PAMスタックに対する応答を読み取ります。

[〜#〜]テストされていません[〜#〜]テスト済みですが、どれほど良いかはまだわかりません。

1

あなたのようです ある運が悪い :(

PostgreSQL を使用できますか?

この認証方法は、認証方法としてLDAPを使用することを除いて、パスワードと同様に機能します。 LDAPは、ユーザー名とパスワードのペアを検証するためにのみ使用されます。したがって、LDAPを認証に使用するには、ユーザーがデータベースにすでに存在している必要があります。使用するサーバーとパラメーターは、pg_hba.confファイルのLDAPキーWordの後に指定します。このパラメーターの形式は次のとおりです。

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

1
Esteban Küber

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

https://bugs.php.net/bug.php?id=75645

0
Miburi

私は個人的にこれが可能であると示唆する情報を見つけることができません。 LDAPディレクトリのデータストアとしてMySQLを使用しているだけです。

0
Robert Rouse

これは間違いなく可能です。ここを参照: 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の部分に導いてくれてありがとう)

0
z0lo

元の投稿から10年が経過しました。MySQLの正式なLDAP接続方法があるため、答えは最終的にはいです。ただし、MySQL Enterprise EditionまたはMySQL Cluster CGEバージョンを実行している必要があります。

MySQLエンタープライズ認証

一部の商用版でのみ利用可能

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
    認証がサポートされています。
0
brentil