MySQL 8の新機能 RESOURCE GROUP と 権限
RESOURCE GROUPはざっくり言うと、セッションごとに利用できるCPUを制限したり固定できる機能です。以前、試した記事はこちら。
意図せず、CPUリソースを制限されてしまうことのないよう、RESOURCE GROUPと権限の関係を調べてみました。
結論
- RESOURCE GROUPを作成するには、RESOURCE_GROUP_ADMIN 権限が必要
- RESOURCE GROUPを適用するには、RESOURCE_GROUP_USER 権限が必要
- RESOURCE_GROUP_USER 権限を持っていれば、他人のセッションのリソースグループも変更できる
- RESOURCE_GROUP_USER権限を与えるかどうかは慎重に考えたほうがよさそう
検証
作成
mysql> CREATE RESOURCE GROUP OneCPU TYPE=USER VCPU=0;
ERROR 1227 (42000): Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN privilege(s) for this operation
適用
何も権限がない状態。
mysql> SET RESOURCE GROUP OneCPU;
ERROR 1227 (42000): Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN OR RESOURCE_GROUP_USER privilege(s) for this operation
testuser に RESOURCE_GROUP_USER を与える。
mysql> GRANT RESOURCE_GROUP_USER ON *.* TO testuser@'%';
Query OK, 0 rows affected (0.01 sec)
$ mysql -utestuser -p
mysql> SET RESOURCE GROUP OneCPU;
Query OK, 0 rows affected (0.00 sec)
testuserがtestuser以外のセッションに対して、RESOURCE GROUPを適用できるかチェック。
適用する対象は(SHOW PROCESSLISTで表示される) Connection Idではなく、Thread_id で指定する必要がある点に注意。
performance_schema から確認できる。
mysql> SELECT THREAD_ID, PROCESSLIST_USER, RESOURCE_GROUP FROM performance_schema.threads
WHERE PROCESSLIST_ID IS NOT NULL;
+-----------+------------------+----------------+
| THREAD_ID | PROCESSLIST_USER | RESOURCE_GROUP |
+-----------+------------------+----------------+
| 43 | NULL | SYS_default |
| 45 | NULL | SYS_default |
| 50 | NULL | SYS_default |
| 88 | testu2 | USR_default |
| 89 | testuser | USR_default |
| 90 | root | USR_default |
+-----------+------------------+----------------+
6 rows in set (0.00 sec)
mysql> SET RESOURCE GROUP OneCPU FOR 88;
Query OK, 0 rows affected (0.00 sec)
mysql> SET RESOURCE GROUP OneCPU FOR 90;
Query OK, 0 rows affected (0.00 sec)
RESOURCE_GROUP_USER 権限を持っていれば、誰のセッションであろうと、リソースグループを適用できる仕様みたい。