[MySQL] ユーザーを新規に作成する - CREATE USER

MySQLで新規にユーザーを作成する場合、CREATE USER文を実行します。もちろんrootなどユーザーを作成できる権限でログインしておく必要があります。

CREATE USER katsube@localhost IDENTIFIED BY 'password';

基本的な使い方

ユーザー名とホスト名

CREATE USERの後にくるkatsube@localhostの部分でユーザー名とログイン元のホスト名、またはIPアドレスを指定します。ここで注意すべきなのはユーザー名が同じであってもログイン元が異なれば全く別のユーザーとして扱われます。

つまり以下の3つのユーザーは全くの別人となります。

CREATE USER katsube@foo.com;
CREATE USER katsube@bar.net;
CREATE USER katsube@hoge.org;

ホスト名にはワイルドカードが利用ができます。_が任意の1文字、%が任意の文字列になります。

CREATE USER katsube@'%.example.com';  -- サブドメインに何が来てもログイン可
CREATE USER katsube@'192.168.%';      -- 192.168で始まるIPアドレスからログイン可

なお以下のようにホスト名を省力した場合は、すべてのホストからログイン可能なユーザーが作成できます。以下の2つは同じ意味になります。

CREATE USER katsube;
CREATE USER katsube@'%';

ホスト名にワイルドカードを利用したり、ユーザー名に特殊な文字を入れる場合は引用符(シングルコーテーション、ダブルコーテーション)やバッククオート(`)で囲う必要があります。

パスワードあり/なし

冒頭に掲載した構文でパスワードありのユーザーが作成できます。

CREATE USER katsube@localhost IDENTIFIED BY 'password';

パスワードが不要な場合はIDENTIFIED BYから先をつけなければOKです。

CREATE USER katsube@localhost;

作成済みのユーザー一覧

mysql.userテーブルを参照することで作成済みのユーザー一覧を確認できます。

mysql> select User, Host from mysql.user;
+---------------+-----------+
| User          | Host      |
+---------------+-----------+
| katsube       | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+

mysql.userテーブルはカラム数が多いのでご注意を。

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+

ユーザーを削除する

blog.katsubemakito.net

権限

デフォルト

デフォルトではUSAGEのみの権限が付与されます。これはログインはできますが他には何も権限が付与されていない状態になります。

mysql> show grants for katsube@localhost;
+---------------------------------------------+
| Grants for katsube@localhost                |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'katsube'@'localhost' |
+---------------------------------------------+

権限を付与する

権限を付与するにはGRANT構文を利用します。以下ではdb1データベース内にあるすべてのテーブルに全権限を付与しています。

GRANT ALL ON db1.* TO katsube@localhost;

詳細は以下の記事を参照ください。 blog.katsubemakito.net

参考ページ