MySQL (MariaDB) ユーザー追加コマンド(ユーザー作成、権限付与)

create userコラム

ユーザー作成手順

ユーザーの作成は以下の順序で行います。

  1. データベースにユーザーを追加
  2. 追加したユーザーに権限を付与

※ 1と2を同時に実行する方法もあります。併せてご紹介します。

コマンド構文

ユーザー作成コマンド(CREATE USER)

CREATE USER "(ユーザー名)"@"(ホスト名)" IDENTIFIED BY (パスワード);
  • ユーザー名
    作成するユーザー名です。
  • ホスト名
    ホスト名またはIPアドレスが指定できます。
  • パスワード
    接続時に使用するパスワードです。省略することができます。

コマンドサンプル:ユーザー作成

ホスト名を指定して作成
CREATE USER "sample_user1"@"localhost";
CREATE USER "sample_user2"@"www";
CREATE USER "sample_user3"@"www.abcd";
CREATE USER "sample_user4"@"%.sample.com";
IPアドレスを指定して作成
CREATE USER "sample_user5"@"192.168.1.10";
CREATE USER "sample_user6"@"192.168.1.0/255.255.255.0";
CREATE USER "sample_user7"@"192.168.1.0/255.255.0.0";
CREATE USER "sample_user8"@"192.168.1.0/255.0.0.0;

コマンドサンプル:作成ユーザーの確認

作成されたユーザーは「mysql.user」テーブルで確認することができます。

SELECT user, host FROM mysql.user;

権限付与コマンド(GRANT)

GRANT (付与する権限) ON (対象データベース名).(対象テーブル名) TO "(ユーザー名)"@"(ホスト名)";
  • 付与する権限
    ユーザーに付与する権限です。
    28に分類されたデータベース操作のなかから、実行を許可する操作を指定します。
    カラム単位で異なる権限を付与することができます。
  • 対象データベース名
    権限を与える範囲を指定します。
  • 対象テーブル名
    データベース名と共に指定することで、権限を与える範囲をテーブル単位に指定することができます。

コマンドパラメータ:指定可能な権限

「ALL」で一度にすべての権限を付与することができます。

SELECTCREATEEXECUTEFILE
UPDATEDROPCREATE ROUTINECREATE USER
INSERTCREATE
TEMPORARY TABLES
ALTER ROUTINECREATE TABLESPACE
DELETECREATE VIEWPROCESS
ALTERSHOW VIEWRELOAD
INDEXREPLICATION CLIENT
TRIGGERREPLICATION SLAVE
EVENTSHOW DATABASES
LOCK TABLESSHUTDOWN
SUPER
GRANTコマンドで指定可能な権限

コマンドサンプル:権限付与

サーバー内のすべてのデータベースに対して権限を付与
GRANT ALL ON *.* TO "sample_user"@"localhost";
GRANT SELECT ON *.* TO "sample_user"@"localhsot";
GRANT SELECT, UPDATE, INSERT ON *.* "sample_user"@"localhost";
特定のデータベースに対して権限を付与
/* sampleDBのすべてのテーブルに対する権限を付与 */
GRANT ALL ON sampleDB.* TO "sample_user"@"localhost";

/* sampleDBのsampleTableに対する権限を付与 */
GRANT ALL ON samoleDB.sampleTable TO "sample_user"@"localhost";
特定のテーブルカラムに対して権限を付与
/* sampleDB.sampleTableの sample_colに対する権限を付与 */
GRANT SELECT (sample_col) ON sampleDB.sampleTable TO "sample_user"@"localhost";

/* sampleDB.sampleTableの sample_colとsample_col2に異なる権限を付与 */
GRANT SELECT (sample_col), INSERT (sample_col2) ON sampleDB.sampleTable TO "sample_user"@"localhost";
GRANT SELECT (sample_col), INSERT (sample_col2) ON sampleDB.sampleTable TO "sample_user"@"localhost";

GRANT SELECT (sample_col, sample_col2) on sampleDB.sampleTable TO "sample_user"@"localhost";
GRANT SELECT, UPDATE (sample_col) on sampleDB.sampleTable TO "sample_user"@"localhost";
GRANT SELECT, UPDATE (sample_col, sample_col2) on sampleDB.sampleTable TO "sample_user"@"localhost";

コマンドサンプル:ユーザーに付与した権限の確認

SHOW GRANTS FOR "sample_user"@"localhost";

コマンドサンプル:ユーザーに付与した権限の削除

REVOKE ALL ON *.* FROM "sample_user"@"localhost";
REVOKE ALL ON sampleDB.* FROM "sample_user"@"localhost";
REVOKE ALL ON sampleDB.sampleTable FROM "sample_user"@"localhost";
REVOKE ALL (sample_col) on sampleDB.sampleTable FROM "sample_user"@"localhost";

削除コマンドでのデータベース指定、テーブル指定は、権限を付与した時と同じ範囲を指定する必要があります。「全体指定」で付与された権限から「一部」を削除したり、「一部」に対して付与された権限を「全体指定」で削除したりすることはできません。

コマンドサンプル:ユーザーに付与した権限の削除(NG例)

/* 全体指定で付与された権限から部分指定で一部分を削除 */
GRANT ALL ON *.* TO "sample_user"@"localhost";
REVOKE ALL ON sampleDB.* from "sample_user"@"localhost"; /* NG */

/* 全体指定で付与された権限から部分指定で一部分を削除 */
GRANT ALL ON sampleDB.* TO "sample_user"@"localhost";
REVOKE ALL ON sampleDB.sampleTable from "sample_user"@"localhost"; /* NG */

/* 部分指定で付与された権限を全体指定で削除 */
GRANT ALL ON sampleDB.* TO "sample_user"@"localhost";
REVOKE ALL ON *.* from "sample_user"@"localhost"; /* NG */

/* 部分指定で付与された権限を全体指定で削除 */
GRANT ALL ON sampleDB.sampleTable TO "sample_user"@"localhost";
REVOKE ALL ON sampleDB.* from "sample_user"@"localhost"; /* NG */

コマンドサンプル:ユーザーの削除

DROP USER 'sample_user'@'localhost';

コマンドサンプル:ユーザーの作成と権限付与を同時に実行する

GRANT (付与する権限) ON (DB名).(TABLE名) TO "(USER名)"@"(HOST名)" IDENTIFIED BY (PASSWORD);

コメント