【MySQL】ユーザー権限 - 一覧・設定・削除

【MySQL】ユーザー権限 - 一覧・設定・削除

MySQLのユーザー権限を解説します。

ユーザー権限

ユーザー権限はユーザーの操作許可です。
様々な操作に対して、権限を個別に設定することができます。

レベル

権限の効力範囲を示すレベルがあります。

権限レベル
レベル 内容
グローバル 全てのデータベースに適用されます。
データベース 特定データベースの全てのオブジェクトに適用されます。
テーブル 特定テーブルの全てのカラムに適用されます。
カラム 特定のテーブルカラムに適用されます。

対象

権限の対象は次の項目があります。

権限対象
対象 内容
グローバル権限 管理者権限です。グローバルレベルの権限です。
データベース権限 データベースレベルの権限です。
テーブル権限 テーブルレベルの権限です。
カラム権限 カラムレベルの権限です。
ストアドルーチン権限 ストアドルーチンに適用されます。この権限はグローバルレベルまたはデータベースレベルを対象に設定します。
プロキシユーザー権限 特定ユーザーを別のユーザーのプロキシにできるよう設定にします。

種類

権限は様々な種類があります。
次の権限は頻繁に使う代表的な権限です。

権限の種類
権限名 レベル 内容
ALL [PRIVILEGES] - 全ての権限(GRANT OPTIONPROXYを除く)
USAGE - 権限なし
CREATE グローバル/データベース/テーブル データベースおよびテーブルの作成を有効にします。
SELECT グローバル/データベース/テーブル/カラム SELECTの使用を有効にします。
INSERT グローバル/データベース/テーブル/カラム INSERT の使用を有効にします。
UPDATE グローバル/データベース/テーブル/カラム UPDATEの使用を有効にします。
DELETE グローバル/データベース/テーブル DELETEの使用を有効にします。
DROP グローバル/データベース/テーブル データベース、テーブル、およびビューの削除を有効にします。

確認(SHOW GRANTS FOR

ユーザーの権限確認はSHOW GRANTS FORを使います。

基本構文

SHOW GRANTS FOR ユーザー

サンプル

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------+
| Grants for guest@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

設定(GRANT ON TO

ユーザーの権限設定はGRANT ON TOを使います。

基本構文

GRANT 権限 ON レベル TO ユーザー

サンプル

グローバルレベル

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------+
| Grants for guest@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> GRANT CREATE ON *.* TO guest@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR guest@localhost;
+--------------------------------------------+
| Grants for guest@localhost                 |
+--------------------------------------------+
| GRANT CREATE ON *.* TO `guest`@`localhost` |
+--------------------------------------------+
1 row in set (0.00 sec)

データベースレベル

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------+
| Grants for guest@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> GRANT CREATE ON mydb.* TO guest@localhost;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------------+
| Grants for guest@localhost                      |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost`       |
| GRANT CREATE ON `mydb`.* TO `guest`@`localhost` |
+-------------------------------------------------+
2 rows in set (0.00 sec)

テーブルレベル

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------+
| Grants for guest@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> GRANT CREATE ON mydb.items TO guest@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------------------+
| Grants for guest@localhost                            |
+-------------------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost`             |
| GRANT CREATE ON `mydb`.`items` TO `guest`@`localhost` |
+-------------------------------------------------------+
2 rows in set (0.00 sec)

カラムレベル

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------+
| Grants for guest@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> USE mydb;
Database changed

mysql> DESC items;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int         | NO   | PRI | NULL    | auto_increment |
| name       | varchar(20) | YES  |     | NULL    |                |
| price      | int         | YES  |     | NULL    |                |
| stock      | int         | YES  |     | NULL    |                |
| updated_at | datetime    | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> GRANT SELECT(name,stock), UPDATE(stock) ON mydb.items TO guest@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------------------------------------------------------+
| Grants for guest@localhost                                                                |
+-------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost`                                                 |
| GRANT SELECT (`name`, `stock`), UPDATE (`stock`) ON `mydb`.`items` TO `guest`@`localhost` |
+-------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

削除(REVOKE ON FROM

ユーザーの権限削除はREVOKE ON FROMを使います。

基本構文

REVOKE 権限, ON レベル FROM ユーザー

サンプル

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------------------------------------------------------+
| Grants for guest@localhost                                                                |
+-------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost`                                                 |
| GRANT SELECT (`name`, `stock`), UPDATE (`stock`) ON `mydb`.`items` TO `guest`@`localhost` |
+-------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> REVOKE SELECT ON mydb.items FROM guest@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR guest@localhost;
+-----------------------------------------------------------------+
| Grants for guest@localhost                                      |
+-----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost`                       |
| GRANT UPDATE (`stock`) ON `mydb`.`items` TO `guest`@`localhost` |
+-----------------------------------------------------------------+
2 rows in set (0.00 sec)

全削除(REVOKE ALL, GRANT OPTION ON FROM

ユーザーの全権限削除はREVOKE ALL, GRANT OPTION ON FROMを使います。

基本構文

REVOKE ALL, GRANT OPTION FROM ユーザー

サンプル

mysql> SHOW GRANTS FOR guest@localhost;
+-----------------------------------------------------------------+
| Grants for guest@localhost                                      |
+-----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost`                       |
| GRANT UPDATE (`stock`) ON `mydb`.`items` TO `guest`@`localhost` |
+-----------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> REVOKE ALL, GRANT OPTION FROM guest@localhost;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR guest@localhost;
+-------------------------------------------+
| Grants for guest@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `guest`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)