mita2 database life

主にMySQLに関するメモです

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 権限を持っていれば、誰のセッションであろうと、リソースグループを適用できる仕様みたい。