本記事は 『Medley(メドレー) Advent Calendar 2024』 の 11日目 の記事です🎄
はじめに
株式会社メドレーの森川です。
普段はインフラ・SRE関連のタスクをメインに業務をしております 🛠️
マスターじゃないMySQLユーザで他のユーザのパスワードを変更させようとしたことがありました。
その際に権限設定で学びがあったので備忘録として記します。
※ MySQLのバージョンは 8系(8.0.34) を想定した内容となっています
前提
以下のようなユーザが作成済みであるとします。
ユーザ名 | 役割 |
---|---|
root | マスターユーザ |
my_user | 今回の軸となる「他ユーザのパスワード変更」を実行するユーザ |
app_user | (なんでもいいが想定として)アプリケーションで使用するためのユーザ |
my_user
の現在の権限は以下のようになっているとします。
(my_user
が CREATE USER されたばかりの状態)
-- show grants for 'my_user'@'%';
-- 実行結果
GRANT USAGE ON *.* TO `my_user`@`%`
目的
「my_user
を使用してapp_user
のパスワードを変更する」 とします。
必要な権限
my_user
に以下のように権限を与えることで、他のユーザのパスワードを変更することが可能となりました。
GRANT UPDATE ON mysql.* TO 'my_user'@'%';
-- SHOW GRANTS FOR 'my_user'@'%';
-- 実行結果
GRANT USAGE ON *.* TO `my_user`@`%`
GRANT UPDATE ON `mysql`.* TO `my_user`@`%`
-- SET PASSWORD FOR 'app_user'@'%' = 'XXXXXXXXXXXX';
-- 実行結果
Query 1 OK: 0 rows affected
上記が最小権限です。
SELECT権限もあるほうが確認作業時に都合が良かったので、SELECT権限を追加した設定としました。
GRANT SELECT,UPDATE ON mysql.* TO 'my_user'@'%';
-- SHOW GRANTS FOR 'my_user'@'%';
-- 実行結果
GRANT USAGE ON *.* TO `my_user`@`%`
GRANT SELECT, UPDATE ON `mysql`.* TO `my_user`@`%`
SELECT
, UPDATE
の有無によるパスワード確認・変更の実行可否については以下の表の通りとなりました。
ダメだった権限設定方法
検証中に以下のような権限の設定も試しましたが、どれも目的は達成できませんでした。
-- alter user 権限を付与してみた、がダメ
GRANT ALTER USER ON *.* TO 'my_user'@'%';
-- DB・テーブルの指定をなくしてみた、がダメ
GRANT ALTER USER TO 'my_user'@'%';
-- userテーブルに限定させようとした、がダメ
GRANT UPDATE ON mysql.user TO 'my_user'@'%';
さいごに
マスターじゃないMySQLユーザで他のユーザのパスワードを変更する場合の最小権限についてまとめました。どなたかの参考になれば幸いです!
また、より適した権限設定などありましたら教えていただけると嬉しいですmm
明日 12/12(木) は @Kirika さんによる弊社主催のイベントについての記事とのことです!お楽しみに✨
We’re hiring!
メドレーでは各種エンジニアを絶賛募集中です!
カジュアル面談いつでもWelcomeですので、どうぞお気軽にお問い合わせください⛄️