Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  アカウントパスワードの割り当て

6.3.5 アカウントパスワードの割り当て

MySQL サーバーに接続するクライアントに必要な証明書には、パスワードを含めることができます。このセクションでは、MySQL アカウントにパスワードを割り当てる方法について説明します。クライアント認証は、プラグインを使用することで発生します。セクション6.3.7「プラガブル認証」を参照してください。

CREATE USER を使用して新しいアカウントを作成するときに、パスワードを割り当てるには、IDENTIFIED BY 句を含めます。

mysql> CREATE USER 'jeffrey'@'localhost'
    -> IDENTIFIED BY 'mypass';

既存のアカウントにパスワードを割り当てる方法またはそれを変更する方法の 1 つは、SET PASSWORD ステートメントを発行することです。

mysql> SET PASSWORD FOR
    -> 'jeffrey'@'localhost' = PASSWORD('mypass');

MySQL では、mysql データベースの user テーブルにパスワードが格納されます。mysql データベースに対する UPDATE 権限を持っている root などのユーザーのみが、ほかのユーザーのパスワードを変更できます。匿名ユーザーとして接続していない場合は、FOR 句を省略すれば自分自身のパスワードを変更できます。

mysql> SET PASSWORD = PASSWORD('mypass');

old_passwords システム変数の値によって、PASSWORD() で使用されるハッシュ化方式が決定されます。その関数を使用しているパスワードを指定しても、SET PASSWORD でそのパスワードの形式が正しくないとして拒否される場合は、old_passwords を設定してハッシュ化方式を変更する必要がある場合もあります。許可されている値については、セクション5.1.4「サーバーシステム変数」を参照してください。

read_only システム変数を有効にすると、SUPER 権限を持っていない任意のユーザーによる SET PASSWORD ステートメントの使用が回避されます。

また、グローバルレベル (ON *.*) で GRANT USAGE ステートメントを使用すると、アカウントの現在の権限に影響を与えずに、アカウントにパスワードを割り当てることができます。

mysql> GRANT USAGE ON *.* TO 'jeffrey'@'localhost'
    -> IDENTIFIED BY 'mypass';

コマンド行からパスワードを割り当てるには、mysqladmin コマンドを使用します。

shell> mysqladmin -u user_name -h host_name password "newpwd"

このコマンドでパスワードが設定されるアカウントは、User カラム内の user_name に一致する user テーブル行を持つアカウント、および Host カラム内の接続元のクライアントホストです。

認証中にクライアントがサーバーに接続すると、MySQL では user テーブル内のパスワードが暗号化されたハッシュ値 (PASSWORD() でパスワードに返される値) として処理されます。アカウントにパスワードを割り当てる際は、平文のパスワードではなく、暗号化された値を格納することが重要です。次のガイドラインを使用します。

  • CREATE USERIDENTIFIED BY 句を含む GRANT、または mysqladmin password コマンドを使用してパスワードを割り当てると、自動的にパスワードが暗号化されます。リテラルの平文パスワードを指定します。

    mysql> CREATE USER 'jeffrey'@'localhost'
        -> IDENTIFIED BY 'mypass';
  • CREATE USER または GRANT では、PASSWORD() でパスワードに返されるハッシュ値がわかっている場合に、平文パスワードの送信を回避できます。前にキーワード PASSWORD を付けたハッシュ値を指定します。

    mysql> CREATE USER 'jeffrey'@'localhost'
        -> IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';
  • SET PASSWORD を使用して、アカウントに空でないパスワードを割り当てる場合は、PASSWORD() 機能を使用してパスワードを暗号化する必要があります。それ以外の場合は、パスワードが平文として格納されます。次のようなパスワードを割り当てると仮定します。

    mysql> SET PASSWORD FOR
        -> 'jeffrey'@'localhost' = 'mypass';

    その結果、暗号化された値ではなく、リテラル値の 'mypass' がパスワードとして user テーブルに格納されます。jeffrey がこのパスワードを使用してサーバーへの接続を試みると、その値が暗号化され、user テーブルに格納された値と比較されます。ただし、格納されている値はリテラル文字列の 'mypass' であるため、比較に失敗し、サーバーは接続を拒否し、「アクセスが拒否されました」というエラーを返します。

注記

PASSWORD() の暗号化は、Unix のパスワード暗号化とは異なります。セクション6.3.1「ユーザー名とパスワード」を参照してください。

SET PASSWORDGRANT、または mysqladmin を使用してパスワードを割り当てることが望ましいですが、user テーブルを直接変更することもできます。この場合、FLUSH PRIVILEGES を使用して、サーバーで付与テーブルを再ロードさせる必要もあります。それ以外の場合は、サーバーを再起動するまで変更が認識されないままです。


User Comments
Sign Up Login You must be logged in to post a comment.