ユーザーを作成する(CREATE USER文)

MySQL では新しいユーザーを作成するときに CREATE USER 文を使用します。ここでは MySQL で新しいユーザーを作成する方法について解説します。

(Last modified: )

新しいユーザーを作成する

ユーザーを作成するには CREATE USER 文を使います。書式は次の通りです。

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    DEFAULT ROLE role [, role ] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'hash_string'
}

tls_option: {
   SSL
 | X509
 | CIPHER 'cipher'
 | ISSUER 'issuer'
 | SUBJECT 'subject'
}

resource_option: {
    MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

password_option: {
    PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
  | PASSWORD HISTORY {DEFAULT | N}
  | PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
  | PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
}

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

オプションが色々とありますが、基本となる書式は次の通りです。

CREATE USER user
CREATE USER user IDENTIFIED BY 'auth_string'

1 つ目の構文の場合はユーザー名( user )を指定しパスワードはなしでユーザーを作成します。 2 つ目の構文の場合はユーザー名( user )とパスワード( 'auth_string' )を指定してユーザーを作成します。パスワードはシングルクォーテーション( ' )で囲って指定してください。

ユーザー名は次の書式で指定します。

'user_name'@'host_name'

ユーザーはユーザー名と接続を行うクライアントのホスト名の組み合わせで指定します。指定したホストから指定したユーザー名でログインした場合だけ接続を行えます。

ユーザー名とホスト名は特別な文字(例えば @ など)を含まない限りは引用符で囲う必要はありませんが、特別な文字を含む場合やホスト名にワイルドカードを使用する場合は逆引用符( ` ) 、シングルクォーテーション( ' )、またはダブルクォーテーション( " )で囲って指定して下さい。(引用符で囲む場合はユーザー名とホスト名は別々に囲って下さい)。

username@hlocalhost
`username`@`localhost`
'username'@'localhost'
"username"@"localhost"

ホスト名はホスト名の他に IP アドレスや localhost を指定することができます。

'username'@'host.example.com'
'username'@'192.168.128.1'
'username'@'localhost'

ホスト名にはワイルドカードである '_' と '%' が使用できます。'_'は任意の一文字を表し'%'は任意の長さの文字列に一致します。(ユーザー名ではワイルドカードを使用できません)。

例えば同じドメインに所属する任意のホストや同じCクラス( 192.168.128.0/24 )の全てのホストから接続できるユーザーを作成するには次のように記述します。

'username'@'%.example.com'
'username'@'192.168.128.%'

またホスト名を省略した場合はワイルドカードの '%' が指定されたものとして扱われます。(すべてのホストから接続可能となります)。

'username'@'%'

では実際にユーザーを作成してみます。 MySQL に root ユーザーでログインしたあと、次のように実行してください。

create user 'kuma'@'localhost' identified by 'bear';
create user 'kirin'@'%.example.com' identified by 'giraffe';
create user 'kaba' identified by 'hippos';
create user neko@192.168.10.100 identified by 'cat';
create user inu@192.168.10.104 identified by 'dog';

新しいユーザーを作成する(1)

5 つのユーザーを作成しました。

新しいユーザーを使ってMySQLに接続する

今までは root ユーザーを使って MySQL コマンドラインツールを起動して MySQL に接続していました。今度は先ほど作成したユーザーで MySQL へ接続してみます。最初に localhost の環境からユーザー 'kuma'@'localhost' を使って接続してみます。コマンドプロンプトから次のように実行してください。

mysql -u kuma -h localhost -p

※ localhost の場合は省略可能なので mysql -u kuma -p でも構いません。

新しいユーザーを使ってMySQLに接続する(2)

パスワードの入力待ちとなりますのでユーザーのパスワードを入力してください。

新しいユーザーを使ってMySQLに接続する(3)

正しく入力できれば MySQL コマンドラインツールが起動し MySQL への接続が完了します。今回使用した kuma@localhost は localhost からの接続を許可していたので問題なく接続することができました。

ではいったん MySQL コマンドラインツールを閉じてもらい、今度は 192.168.10.104 の環境からユーザー neko@192.168.10.100 で接続してみます。コマンドプロンプトから次のように実行してください。

mysql -u neko -h 192.168.10.100 -p

新しいユーザーを使ってMySQLに接続する(4)

パスワードの入力待ちとなりますのでユーザーのパスワードを入力してください。

新しいユーザーを使ってMySQLに接続する(5)

ユーザー名およびパスワードは正しいのですが、このユーザーは 192.168.10.100 の環境からしからログインが許可されていません。そのため 192.168.10.104 の環境からログインしようとすると Can't connect to MySQL server on 'ホスト名' というエラーが表示されて接続に失敗します。

新しいユーザーを使ってMySQLに接続する(5)

今度は 192.168.10.104 の環境からユーザー inu@192.168.10.104 で接続してみます。コマンドプロンプトから次のように実行してください。 今度はコマンドプロンプトから次のように実行してください。

mysql -u inu -h 192.168.10.104 -p

新しいユーザーを使ってMySQLに接続する(6)

パスワードの入力待ちとなりますのでユーザーのパスワードを入力してください。

新しいユーザーを使ってMySQLに接続する(7)

このユーザーは 192.168.10.104 のホストから接続が許可されており、現在接続を試みているホストが 192.168.10.104 と一致してるので接続を行うことができました。

パスワード無しのユーザーを作成する

ユーザーを作成するときに次の書式を使用するとパスワードが無いユーザーを作成することができます。

CREATE USER user

では実際にユーザーを作成してみます。 MySQL に root ユーザーでログインしたあと、次のように実行してください。

create user 'kaeru'@'localhost';

パスワード無しのユーザーを作成する(1)

パスワード無しのユーザーを作成することができました。

パスワード無しのユーザーの場合、 MySQL に接続するときにパスワードの入力が不要です。コマンドプロンプトから次のように実行してください。

mysql -u kaeru -h localhost

※ localhost の場合は省略可能なので mysql -u kaeru でも構いません。

パスワード無しのユーザーを作成する(2)

すぐに MySQL へ接続することができました。このようにパスワード無しのユーザーの場合、ユーザー名だけで接続ができてしまいますのでセキュリティ的に非常に危険です。何か特別な理由がない限りはパスワード無しのユーザーは作成されないようにしてください。

-- --

MySQL で CREATE USER 文を使って新しくユーザーを作成する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。