タイトル: ユーザー名変更(RENAME USER)
SEOタイトル: MariaDB/MySQL でユーザー名を変更する RENAME USER の使い方と注意点
| この記事の要点 |
|
RENAME USER 文の概要
MariaDB/MySQL で既存のユーザーアカウントの名前を変更するには RENAME USER 文を使用します。「ユーザーを一度削除してから作成し直す」操作と違って、権限定義(GRANT で付与されたもの)・パスワード・所有しているテーブルなどはそのまま保持されます。アカウント運用上の都合で命名規則を変えたい場合や、アプリ刷新に伴ってアカウント名を整理したい場合に便利な構文です。
構文
RENAME USER '旧ユーザ名'@'ホスト' TO '新ユーザ名'@'ホスト';MariaDB/MySQL ではユーザーは「ユーザー名」と「接続元ホスト」のペアで識別される点に注意が必要です。'app_user'@'localhost' と 'app_user'@'%' は別アカウントとして扱われるため、両方を変えたい場合は両方の RENAME 文を発行します。
使用例
例1:単一アカウントの名前変更
-- 旧名 old_user → 新名 new_user に変更(接続元はそのまま localhost)
RENAME USER 'old_user'@'localhost' TO 'new_user'@'localhost';例2:複数アカウントを一括変更
カンマ区切りで複数のアカウントを 1 文にまとめて変更することもできます。
RENAME USER
'devuser'@'localhost' TO 'app_dev'@'localhost',
'devuser'@'%' TO 'app_dev'@'%';例3:ホストごと変更する
接続元の制限を緩めたい/厳しくしたい場合は、ホスト部分を書き換えます。
-- localhost からの接続のみだったユーザーを、社内 LAN 全体から接続できるように変更
RENAME USER 'batch'@'localhost' TO 'batch'@'192.168.10.%';権限と影響範囲
| 項目 | 引き継ぎ |
|---|---|
| GRANT で付与された権限 | 引き継がれる |
| パスワード | 引き継がれる(再設定不要) |
| 所有オブジェクト(VIEW / STORED PROCEDURE 等の DEFINER) | 引き継がれる |
| 現在接続中のセッション | 影響なし(次回ログイン時から新名) |
| アプリの接続文字列 | 手動で書き換えが必要 |
実行に必要な権限
RENAME USER の実行には次のいずれかが必要です。
- グローバルな
CREATE USER権限 - mysql システムデータベースに対する
UPDATE権限
一般的には DBA 権限を持つ管理ユーザー(root など)が実行します。
注意点とハマりどころ
- 同名アカウントを TO で指定するとエラーになります。新名は既存に存在しないユーザー名にしてください。
- 同時に走るアプリの接続文字列を忘れずに更新します。古い名前のままだとログインできなくなります。
- 反映を確実にしたい場合は
FLUSH PRIVILEGES;を実行すると安心です(MariaDB では自動で反映されるケースが多いですが、明示しておくと事故防止になります)。 - 所有オブジェクトの DEFINER は古い名前で残ることがあります。
information_schema.routinesやviewsを SELECT して確認しましょう。
確認方法
-- 変更後にユーザー一覧を確認
SELECT User, Host FROM mysql.user WHERE User IN ('old_user','new_user');
-- 権限が引き継がれているかを確認
SHOW GRANTS FOR 'new_user'@'localhost';RENAME USER と DROP/CREATE の使い分け
| シーン | 推奨手段 |
|---|---|
| 名前だけを変えたい(権限・所有物はそのまま) | RENAME USER |
| 権限も一新したい | DROP USER → CREATE USER + GRANT |
| 接続元ホストの制限だけ変えたい | RENAME USER でホスト部分を書き換え |
| パスワードも変えたい | RENAME USER 実行後に ALTER USER ... IDENTIFIED BY ... |