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

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

(Last modified: )

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

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

CREATE [OR REPLACE] USER [IF NOT EXISTS] 
 user_specification [,user_specification ...] 
  [REQUIRE {NONE | tls_option [[AND] tls_option ...] }]
  [WITH resource_option [resource_option ...] ]
  [lock_option] [password_option] 

user_specification:
  username [authentication_option]

authentication_option:
  IDENTIFIED BY 'password' 
  | IDENTIFIED BY PASSWORD 'password_hash'
  | IDENTIFIED {VIA|WITH} authentication_rule [OR authentication_rule  ...]

authentication_rule:
    authentication_plugin
  | authentication_plugin {USING|AS} 'authentication_string'
  | authentication_plugin {USING|AS} PASSWORD('password')

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
  | MAX_STATEMENT_TIME time

password_option:
  PASSWORD EXPIRE
  | PASSWORD EXPIRE DEFAULT
  | PASSWORD EXPIRE NEVER
  | PASSWORD EXPIRE INTERVAL N DAY

lock_option:
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

この中でも基本となる部分は次のとおりです。

CREATE USER username
CREATE USER username IDENTIFIED BY 'password'

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

ユーザー名の指定方法はこの後詳しく記載しますが ユーザー名@ホスト名 の形式で指定します。

それでは実際にユーザーを作成してみます。次のように MariaDB コマンドラインツールを起動し、 MariaDB へ接続したあと次のように実行してください。

create user 'kuma'@'localhost' identified by 'bear';

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

新しいユーザー 'kuma'@'localhost' を作成することができました。

作成済みのユーザーの一覧を確認するには次のように実行してください。

select user, host from mysql.user;

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

先ほど作成したユーザーが追加されていることが確認できました。

ユーザー名の指定方法

ユーザーを作成するときに指定するユーザー名は次の書式で指定します。

ユーザー名@ホスト名

ユーザーはユーザー名と接続を行うクライアントのホスト名の組み合わせで指定します。指定したホストから指定したユーザー名でログインした場合だけ接続を行えます。ユーザー名が同じでも、異なるホストからログインを行うとログインすることができません。

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

username@host.example.com
`username`@`host.example.com`
'username'@'host.example.com'
"username"@"host.example.com"

ホスト名はホスト名の他に 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'@'%'

それでは実際にユーザーを作成してみます。次のように実行してください。

create user 'kirin'@'home.example.com' identified by 'giraffe';
create user neko@192.168.10.10 identified by 'cat';
create user "inu"@"192.168.10.%" identified by 'dog';
create user 'kaba' identified by 'hippos';

ユーザー名の指定方法(1)

新しいユーザーを 4 つ作成することができました。

あらためて作成済みのユーザーの一覧を確認してみます。

ユーザー名の指定方法(2)

先ほど作成したユーザーが追加されていることが確認できました。

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

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

mariadb -u kuma -p

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

※ mariadb -u kuma -h localhost -p でも同じです。

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

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

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

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

次に 192.168.10.105 の環境から neko@192.168.10.10 を使ってログインしてみます。次のように実行してください。

mariadb -u neko -h 192.168.10.10 -p

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

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

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

ユーザー名とパスワードは正しく入力しましたが接続に失敗しました。このユーザーは 192.168.10.10 の環境からのみログインを許可していたのですが、接続を行った環境が 192.168.10.105 だったためです。

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

最後に 192.168.10.105 の環境から "inu"@"192.168.10.%" を使ってログインしてみます。次のように実行してください。

mariadb -u inu -h 192.168.10.105 -p

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

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

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

無事 MariaDB に接続することができました。このユーザーは 192.168.10.0/24 の環境からログインを許可していたのですが、接続を行った環境が 192.168.10.105 だったためです。

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

存在しているユーザーと同じユーザーを作成した場合

既に存在するユーザーと同じユーザー名とホスト名の組み合わせで新しいユーザーを作成しようとするとエラーが発生します。

例えば現在 mydb データベースには shika@localhost というユーザーが作成済みですが、同じ shiki@localhost を作成してみます。

create user shika@localhost identified by 'shika';

存在しているユーザーと同じユーザーを作成した場合(1)

「Operation CREATE USER failed for 'shika'@'localhost'」というエラーが発生しました。今回パスワードは別のものを指定したのですがエラーとなりました。このようにすでに作成済みのユーザーと同じユーザー名とホスト名の組み合わせのユーザーを作成しようとエラーが発生します。

IF NOT EXISTS

ユーザーを作成する時に、同じユーザー名とホスト名の組み合わせのユーザーが存在したときはユーザーの作成を行わないようにするには次の書式を使用してください。

CREATE USER IF NOT EXISTS username IDENTIFIED BY 'password'

作成しようとするユーザーが存在していなければ新しいユーザーを作成します。同じユーザーが既に存在していたら何もしません。

実際に試してみます。 shika@localhost というユーザーが既に存在している状態で、次のように実行してみます。

create user if not exists shika@localhost identified by 'shika';

存在しているユーザーと同じユーザーを作成した場合(2)

既に存在しているユーザー名とホスト名の組み合わせを指定してユーザーを作成しようとした場合でもエラーとはなりませんでした。既存のユーザーはそのままで、新しいユーザーは作成されません。

なお 1 warning と表示されているようにエラーは出ていませんが警告は表示されています。下記のように実行することで警告の内容を確認できます。

show warnings;

存在しているユーザーと同じユーザーを作成した場合(3)

警告の内容は IF NOT EXISTS を付けずに既存のユーザーと同じユーザー名とホスト名の組み合わせでユーザーを作成しようとしたときに表示されたエラーと同じ内容でした。

OR REPLACE

ユーザーを作成する時に、同じユーザー名とホスト名の組み合わせのユーザーが存在したときは、存在したユーザーを削除して新しいユーザーを作成するには次の書式を使用してください。

CREATE OR REPLACE USER username IDENTIFIED BY 'password'

同じユーザー名とホスト名の組み合わせのユーザーが存在した場合は削除した上で新しいユーザーを作成します。

実際に試してみます。 shika@localhost というユーザーが既に存在している状態で、次のように実行してみます。

create or replace user shika@localhost identified by 'shika';

存在しているユーザーと同じユーザーを作成した場合(4)

同じユーザー名とホスト名の組み合わせのユーザー既に存在していましたが、エラーにならずに新しいユーザーが作成されました。元々作成されていたユーザーは削除されています。

-- --

MariaDB で新しいユーザーを作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。