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」で一度にすべての権限を付与することができます。

SELECT CREATEEXECUTEFILE
UPDATE DROPCREATE ROUTINECREATE USER
INSERT CREATE
TEMPORARY TABLES
ALTER ROUTINECREATE TABLESPACE
DELETE CREATE VIEWPROCESS
ALTER SHOW 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);

コメント

タイトルとURLをコピーしました