MySQL は、プラグ可能な認証を通じて利用できる多くの認証メカニズムをサポートしています。 MySQL は多くのアルゴリズムを使用して、ユーザー テーブルに格納されているパスワードを暗号化します。
- mysql_native_password プラグインは、標準のパスワード形式である 41 バイト幅のハッシュを実装します。
- mysql_old_password プラグインは、安全性の低い 16 バイト幅の古い形式を実装しています。
- sha256_password プラグインは、セキュア コンピューティングで広く使用されている SHA-256 ハッシュ アルゴリズムを実装しています。
old_passwords システム変数の値は、PASSWORD() のアルゴリズムを指定します。 関数は、次のようにパスワードを作成するために使用します:
- 0 :MySQL 4.1.1 以降で使用されている標準アルゴリズム
- 1 :MySQL 4.1.1 より前に使用されていた古いアルゴリズム
- 2 :SHA-256 アルゴリズム
default-authentication-plugin でサーバーを起動します オプションを sha256_password に設定 すべての新規ユーザーに SHA-256 パスワードを使用するか、IDENTIFIED WITH sha256_password を指定して CREATE USER を使用します 特定のユーザーの SHA-256 パスワードを指定する句。
クライアント側の平文認証プラグイン
PAM (Pluggable Authentication Modules) 認証などの一部の認証方法では、サーバーがパスワードを通常の形式で処理できるように、クライアントが平文のパスワードをサーバーに送信する必要があります。 mysql_clear_password プラグインがこの動作を有効にします。
MySQL クライアント ライブラリには、組み込みのクリアテキスト認証プラグイン mysql_clear_password が含まれています。プラグインはプレーン テキストのパスワードをサーバーに送信するために使用されます。通常、パスワードはハッシュされます。プラグインは、LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN 環境変数と –enable-cleartext-plugin の指定によって有効になります mysql や mysqladmin などの MySQL クライアント アプリケーションを実行する場合。 mysql_options() C API 関数の MYSQL_ENABLE_CLEARTEXT_PLUGIN オプションを使用して、プラグインを有効にすることもできます。
読み込み可能な認証プラグイン
デフォルトの組み込みプラグインに加えて、MySQL はいくつかのロード可能なプラグインを提供します:
- テスト認証プラグイン (test_plugin_server ) は、ネイティブまたは古いパスワード認証を使用して認証し、テストおよび開発を目的としています。
- Socket Peer-Credential (auth_socket) プラグインは、Linux ユーザー名が MySQL アカウントと一致する場合にのみ、ユーザーが UNIX ソケット ファイル経由で接続できるようにします。
- PAM 認証プラグイン (authentication_pam) は、外部認証メカニズムを使用してログインできる Enterprise Edition プラグインです。 MySQL はパスワードを保存しませんが、オペレーティング システムによる認証のために、UNIX PAM (Pluggable Authentication Modules) メカニズムを使用して、クライアントから提供されたユーザー名とパスワードを送信します。
独自の認証プラグインを開発できます。テスト認証プラグインは、開発者が独自のプラグインを作成するために使用することを目的としています。そのソース コードは、MySQL ソース コード配布の一部として入手できます。 plugin-load でサーバーを起動して、読み込み可能な認証プラグインを読み込みます 次の例のように、コマンド ラインまたは my.cnf ファイルでオプションを指定します。
[mysqld] plugin-load=authentication_pam.so
PAM 認証プラグイン
PAM 認証プラグインは、オペレーティング システムに対して MySQL アカウントを認証する Enterprise Edition プラグインです。 PAM は、認証を構成するサービスを定義します。これらは /etc/pam.d に保存されます . PAM は、認証するサービスを /etc/pam.d で探します。たとえば、mysql-pam という PAM サービスを作成するには、次の内容でファイル /etc/pam.d/mysql-pam を作成します。
#%PAM-1.0 auth include password-auth account include password-auth
MySQL 認証に加えて、PAM は LDAP や Active Directory などの他の認証方法と統合されるため、PAM を使用して、ネットワーク内の単一のストアに対して多くのサービス (MySQL を含む) を認証できます。オペレーティング システム ユーザーに直接マップする MySQL ユーザーを作成するには、次のようなステートメントを使用します。
CREATE USER bob@localhost IDENTIFIED WITH authentication_pam AS 'mysql-pam';
bob がログインすると、MySQL はクライアントから受け取ったユーザー名とパスワードを PAM に渡します。PAM はオペレーティング システムに対して認証します。クライアントは、クリア テキストでパスワードを送信する必要があります。クライアント側のクリアテキスト認証プラグインを有効にして、この目的を果たします:
shell> mysql --enable-cleartext-plugin -ubob -p Enter password: bob’s_OS_password
PAM 認証プラグインを使用してグループベースのログインを有効にするには、どのユーザーとも一致しないが、オペレーティング システム グループから MySQL ユーザーへの一連のマッピングを指定する PAM 対応の匿名プロキシ アカウントを作成します。
CREATE USER ''@'' IDENTIFIED WITH authentication_pam AS 'mysql-pam, sales=m_sales, finance=m_finance';
前の例では、sales および finance オペレーティング システム グループと、m_sales および m_finance MySQL ユーザーがいると想定しています。次に、PROXY 権限を匿名プロキシ アカウントに付与し、m_sales および m_finance MySQL ユーザーとしてログインする権限を付与する必要があります。
GRANT PROXY ON m_sales@localhost TO ''@''; GRANT PROXY ON m_finance@localhost TO ''@'';
販売および財務グループのメンバーであるユーザーは、mysql コマンドライン プロンプトでオペレーティング システムの資格情報を提供できるようになりました。これにより、それぞれ m_sales または m_finance MySQL ユーザーとしてログインし、これらのアカウントに付与されたすべての権限が付与されます。たとえば、ピーターが販売グループのメンバーである場合、彼は次のようにログインできます:
shell> mysql --enable-cleartext-plugin -upeter -p Enter password: peter’s_OS_password Welcome to the MySQL monitor. Commands end with ; or \g. ... mysql> SELECT CURRENT_USER(); +-------------------+ | CURRENT_USER() | +-------------------+ | m_sales@localhost | +-------------------+ 1 row in set (0.01 sec)MySQL ユーザー管理の初心者向けガイド
MySQL 権限について