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


13.7.1.2 CREATE USER 構文

CREATE USER user_specification [, user_specification] ...

user_specification:
    user
    [
      | IDENTIFIED WITH auth_plugin [AS 'auth_string']
        IDENTIFIED BY [PASSWORD] 'password'
    ]

CREATE USER ステートメントは、新しい MySQL アカウントを作成します。すでに存在するアカウントに対しては、エラーが発生します。このステートメントを使用するには、mysql データベースに対するグローバルな CREATE USER 権限または INSERT 権限が必要です。各アカウントについて、CREATE USER は、権限のない新しい行を mysql.user テーブル内に作成し、そのアカウントに認証プラグインを割り当てます。使用されている構文に応じて、CREATE USER はそのアカウントにパスワードも割り当てる可能性があります。

user_specification 句は、アカウント名と、そのアカウントを使用するクライアントの認証方法に関する情報で構成されます。CREATE USER 構文のこの部分は GRANT と共有されるため、ここでの説明は GRANT にも適用されます。

各アカウント名には、セクション6.2.3「アカウント名の指定」で説明されている形式が使用されます。例:

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';

アカウント名のユーザー名の部分のみを指定した場合は、'%' のホスト名の部分が使用されます。

サーバーは、ユーザー指定句にプラグインを指定するための IDENTIFIED WITH またはパスワードを指定するための IDENTIFIED BY が含まれているかどうかに応じて、各アカウントに認証プラグインとパスワードを次のように割り当てます。

  • IDENTIFIED WITH を指定すると、サーバーは指定されたプラグインを割り当てますが、そのアカウントにパスワードはありません。

  • IDENTIFIED BY を指定すると、サーバーはプラグインを暗黙的に割り当て、さらに指定されたパスワードを割り当てます。

  • IDENTIFIED WITHIDENTIFIED BY のどちらも指定しない場合、サーバーはプラグインを暗黙的に割り当てますが、そのアカウントにパスワードはありません。

アカウントにパスワードがない場合は、そのアカウントの mysql.user テーブル行内の Password カラムが空のままになります。これはセキュアではありません。パスワードを設定するには、SET PASSWORD を使用します。セクション13.7.1.7「SET PASSWORD 構文」を参照してください。

認証プラグインの暗黙的な割り当てでは、サーバーは次のルールを使用します。

  • MySQL 5.6.6 の時点では、サーバーはそのアカウントにデフォルトのプラグインを割り当てます。このプラグインが、そのアカウントの mysql.user テーブル行内の plugin カラムの値になります。デフォルトのプラグインは、サーバーの起動時に --default-authentication-plugin オプションがほかの値に設定されないかぎり、mysql_native_password です。

  • MySQL 5.6.6 より前は、サーバーはそのアカウントにプラグインを割り当てません。そのアカウントの mysql.user テーブル行内の plugin カラムが空のままになります。

特定のアカウントを使用するクライアント接続の場合は、サーバーがそのアカウントに割り当てられた認証プラグインを呼び出すと、クライアントは、そのプラグインが実装している認証方法によって要求される資格証明を指定する必要があります。サーバーが (アカウントの作成時または接続時に) そのプラグインを見つけることができない場合は、エラーが発生します。

アカウントの mysql.user テーブル行に空以外の plugin カラムが含まれている場合:

  • サーバーは、指定されたプラグインを使用してクライアントの接続試行を認証します。

  • SET PASSWORDPASSWORD() とともに使用したアカウントのパスワードへの変更は、PASSWORD() で適切なパスワードハッシュ方式が使用されるように、old_passwords システム変数が認証プラグインに必要な値に設定された状態で実行する必要があります。プラグインが mysql_old_password である場合は、SET PASSWORD を、old_passwords の値には関係なく 4.1 より前のパスワードハッシュを使用する OLD_PASSWORD() とともに使用してパスワードを変更することもできます。

アカウントの mysql.user テーブル行に空の plugin カラムが含まれている場合:

  • サーバーは、Password カラムに格納されているパスワードのハッシュ形式に応じて、mysql_native_password または mysql_old_password 認証プラグインを使用してクライアントの接続試行を認証します。

  • SET PASSWORD を使用したアカウントのパスワードへの変更は、old_passwords が 4.1 または 4.1 より前のパスワードハッシュを示す、それぞれ 0 または 1 に設定された状態で PASSWORD() とともに、あるいは old_passwords の値には関係なく 4.1 より前のパスワードハッシュを使用する OLD_PASSWORD() とともに実行できます。

CREATE USER の例:

  • アカウントの認証プラグインを指定するには、IDENTIFIED WITH auth_plugin を使用します。プラグイン名は、引用符で囲まれた文字列リテラルまたは引用符で囲まれていない名前にすることができます。'auth_string' は、プラグインに渡すオプションの引用符で囲まれた文字列リテラルです。その文字列の意味はプラグインによって解釈されるため、その形式はプラグイン固有です。特定のプラグインが受け入れる認証文字列の値 (存在する場合) については、そのプラグインのドキュメントを参照してください。

    CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password;
    

    サーバーは、そのアカウントに指定された認証プラグインを割り当てますが、パスワードは割り当てません。クライアントは、接続時にパスワードを指定する必要がありません。ただし、パスワードのないアカウントはセキュアではありません。アカウントが確実に特定の認証プラグインを使用し、かつ対応するハッシュ形式を持つパスワードが設定されるようにするには、IDENTIFIED WITH でプラグインを明示的に指定したあと、SET PASSWORD を使用してパスワードを設定します。

    CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password;
    SET old_passwords = 0;
    SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');
    

    SET PASSWORDPASSWORD() とともに使用したアカウントのパスワードへの変更は、PASSWORD() で適切なパスワードハッシュ方式が使用されるように、old_passwords システム変数がアカウントの認証プラグインに必要な値に設定された状態で実行する必要があります。そのため、代わりに sha256_password または mysql_old_password プラグインを使用するには、CREATE USER ステートメントでそのプラグインを指定し、SET PASSWORD を使用する前に old_passwords をそれぞれ 2 または 1 に設定します。(mysql_old_password の使用はお勧めできません。これは非推奨であり、そのサポートは将来の MySQL リリースで削除される予定です。)

  • アカウントの作成時にアカウントのパスワードを指定するには、IDENTIFIED BY をプレーンテキストのパスワードのリテラル値とともに使用します。

    CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
    

    サーバーは、前に説明したようにそのアカウントに認証プラグインを暗黙的に割り当て、さらに特定のパスワードを割り当てます。クライアントは、接続時に特定のパスワードを指定する必要があります。

    暗黙的に割り当てられたプラグインが mysql_native_password である場合は、old_passwords システム変数が 0 に設定されている必要があります。そうでない場合、CREATE USER はそのプラグインに必要な形式でパスワードをハッシュしないため、エラーが発生します。

    mysql> SET old_passwords = 1;
    mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
    ERROR 1827 (HY000): The password hash doesn't have the expected
    format. Check if the correct password algorithm is being used with
    the PASSWORD() function.
    
    mysql> SET old_passwords = 0;
    mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
    Query OK, 0 rows affected (0.00 sec)
    
  • パスワードのハッシュ値 (パスワードに対して PASSWORD() が返す値) がわかっている場合にプレーンテキストのパスワードを指定しないようにするには、そのハッシュ値の前にキーワード PASSWORD を指定します。

    CREATE USER 'jeffrey'@'localhost'
    IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';
    

    サーバーは、前に説明したようにそのアカウントに認証プラグインを暗黙的に割り当て、さらに特定のパスワードを割り当てます。このパスワードハッシュは、割り当てられたプラグインに必要な形式である必要があります。クライアントは、接続時にそのパスワードを指定する必要があります。

  • ユーザーがパスワードなしで接続できるようにするには、IDENTIFIED BY 句を含めないようにします。

    CREATE USER 'jeffrey'@'localhost';
    

    サーバーは、前に説明したようにそのアカウントに認証プラグインを暗黙的に割り当てますが、パスワードは割り当てません。クライアントは、接続時にパスワードを指定する必要がありません。ただし、パスワードのないアカウントはセキュアではありません。これを回避するには、SET PASSWORD を使用してアカウントのパスワードを設定します。

先に説明したように、プラグインの暗黙的な割り当ては、デフォルトの認証プラグインによって異なります。--default-authentication-plugin の許可される値は mysql_native_pluginsha256_password であり、mysql_old_password は許可されません。つまり、CREATE USER ... IDENTIFIED BY 構文で mysql_old_password を使用するアカウントを作成できるように、デフォルトのプラグインを設定することはできません。mysql_old_password を使用するアカウントを作成するには、CREATE USER ... IDENTIFIED WITH を使用してプラグインを明示的に指定したあと、そのパスワードを設定します。

CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_old_password;
SET old_passwords = 1;
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');

ただし、mysql_old_password は非推奨であるため、前の手順はお勧めできません。

パスワードと認証プラグインの設定の詳細は、セクション6.3.5「アカウントパスワードの割り当て」およびセクション6.3.7「プラガブル認証」を参照してください。

重要

状況によっては、CREATE USER がサーバーログ、またはクライアント側にある ~/.mysql_history などの履歴ファイル内に記録されることがあります。つまり、平文のパスワードが、その情報に対する読み取りアクセス権を持つ任意のユーザーによって読み取られる可能性があります。これがサーバーログで発生する条件およびこれを制御する方法については、セクション6.1.2.3「パスワードおよびロギング」を参照してください。クライアント側のロギングに関する同様の情報については、セクション4.5.1.3「mysql のロギング」を参照してください。

重要

MySQL の一部のリリースでは、新たな権限や機能を追加するために付与テーブルの構造に変更を加えているものもあります。すべての新しい機能を確実に活用できるようにするには、新しいバージョンの MySQL に更新するときに常に付与テーブルを更新して、最新の構造を持つようにします。セクション4.4.7「mysql_upgrade — MySQL テーブルのチェックとアップグレード」を参照してください。


User Comments
  Posted by Andrew Bikadorov on March 19, 2015
-- Create Admin user allow access from anywhere, remove WITH GRANT OPTION and change ALL PRIVILEGES to SELECT,INSERT,UPDATE,DELETE or/and other if not admin user is needed
GRANT ALL PRIVILEGES ON *.* TO 'UserName'@'%' IDENTIFIED BY 'UnencriptedPa55w0RdHeRe' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Sign Up Login You must be logged in to post a comment.