Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.