[第34回] 同じサーバーのDBも業務別に権限を分ける
2026年11月9日
同一サーバーに複数業務DBがあっても注文担当へ精算まで許可する必要はない。QueryPieで参照可能DBを定めた。
以前のテーブル制限と違いDB自体を分ける。一つのMySQL上の注文と精算のうち、注文だけを許可した。
まず両DBを参照できると確認する
route_labと同じサーバーにep34_financeと架空精算3件を追加し、DB Schema Scope Labを登録した。
最初はHost単位のRead-Onlyを付け、Webエディターで注文と精算34002の両方を同じ接続で取得した。

登録DBアカウントは両テーブルを読める。その権限を維持し、QueryPie利用者の範囲だけ変更した。
付与時に注文DBを指定する
事前接続を切りHost権限を回収して、Grant PrivilegeでSchema (Logical DB)を選んだ。
接続とHost Level Privilege Read-Onlyを選び、Add Itemでroute_labのSelectを追加した。MySQLではテーブルまで指定せずDB名でよい。

初期表示のinformation_schema・mysqlのSelectは維持し、ep34_financeは追加しなかった。
保存後のSchema Level一覧にDBとSelectが残り、利用者側も同じ範囲を確認できた。
注文は参照でき、精算は制限される
開発者で新規接続し同じ注文SQLを実行すると、27002、SHIPPED、18,500ウォンが返った。

同じ精算SQLは「No permission to execute SELECT statement」となり、新たなDB範囲で以前の参照が制限された。

再度注文を見ても正常で、精算拒否後も業務は続けられた。
登録DBアカウントで別確認すると両方読めた。元アカウントを維持し利用者別に範囲を絞れると分かった。
どのDBを参照したかも記録される
人と接続でQuery Auditを絞ると、前2件・変更後3件の計5件が集まった。
精算はFailure・Preventedで、詳細に人、時刻、ep34_reader、ep34_financeのsettlements、SQL、拒否文が残った。

最後の注文はSuccessでSchema Level route_labのSelectも表示され、使った権限まで分かった。
権限の変更履歴も確認する
Access Control Logsに付与・回収、人、権限、時刻、Action By管理者が残った。実習後の回収も続いて表示された。

DBサーバーを増やさず担当業務に合わせて注文と精算を分けられた。設定と実参照を併せて確認できる点も有用だった。
QueryPie Community 11.6.7、MySQL 8.0.42のWeb SQLエディターでテスト人員・データを使った。
参考: Access Control · Privilege Type · Query Audit
![[第33回] DB権限と接続履歴を一つの報告書にまとめる](/assets/content/acp-lab-notes/database-audit-reports/01.webp)
![[第35回] WHEREを忘れたUPDATEとDELETEを止める](/assets/content/acp-lab-notes/prevent-unsafe-sql/01.webp)