【MySQL】ユーザー権限 - 一覧・設定・削除
MySQLのユーザー権限について解説します。
検証環境
ユーザー権限
ユーザー権限は“ユーザーの操作許可”です。
様々な操作に対して、権限を個別に設定することができます。
レベル
権限には効力範囲を示すレベルがあります。
レベル | 内容 |
---|---|
グローバル | 全てのデータベースに適用されます。 |
データベース | 特定データベースの全てのオブジェクトに適用されます。 |
テーブル | 特定テーブルの全てのカラムに適用されます。 |
カラム | 特定のテーブルカラムに適用されます。 |
対象
権限の対象は次の項目があります。
対象 | 内容 |
---|---|
グローバル権限 | 管理者権限です。グローバルレベルの権限です。 |
データベース権限 | データベースレベルの権限です。 |
テーブル権限 | テーブルレベルの権限です。 |
カラム権限 | カラムレベルの権限です。 |
ストアドルーチン権限 | ストアドルーチンに適用されます。この権限はグローバルレベルまたはデータベースレベルを対象に設定します。 |
プロキシユーザー権限 | 特定ユーザーを別のユーザーのプロキシにできるよう設定にします。 |
種類
権限は様々な種類があります。
次の権限は頻繁に使う代表的な権限です。
権限名 | レベル | 内容 |
---|---|---|
ALL [PRIVILEGES] | - | 全ての権限(GRANT OPTION とPROXY を除く) |
USAGE | - | 権限なし |
CREATE | グローバル/データベース/テーブル | データベースおよびテーブルの作成を有効にします。 |
SELECT | グローバル/データベース/テーブル/カラム | SELECT の使用を有効にします。 |
INSERT | グローバル/データベース/テーブル/カラム | INSERT の使用を有効にします。 |
UPDATE | グローバル/データベース/テーブル/カラム | UPDATE の使用を有効にします。 |
DELETE | グローバル/データベース/テーブル | DELETE の使用を有効にします。 |
DROP | グローバル/データベース/テーブル | データベース、テーブル、およびビューの削除を有効にします。 |
確認(SHOW GRANTS FOR
)
ユーザーの権限確認はSHOW GRANTS FOR文を使用します。
基本構文
SHOW GRANTS FOR ユーザー
サンプル
___ih_hl_start
mysql> SHOW GRANTS FOR guest@localhost;
___ih_hl_end
+-------------------------------------------+
| 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)
___ih_hl_start
mysql> GRANT CREATE ON *.* TO guest@localhost;
___ih_hl_end
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)
___ih_hl_start
mysql> GRANT CREATE ON mydb.* TO guest@localhost;
___ih_hl_end
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)
___ih_hl_start
mysql> GRANT CREATE ON mydb.items TO guest@localhost;
___ih_hl_end
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)
___ih_hl_start
mysql> GRANT SELECT(name,stock), UPDATE(stock) ON mydb.items TO guest@localhost;
___ih_hl_end
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)
___ih_hl_start
mysql> REVOKE SELECT ON mydb.items FROM guest@localhost;
___ih_hl_end
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)
___ih_hl_start
mysql> REVOKE ALL, GRANT OPTION FROM guest@localhost;
___ih_hl_end
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)