導入
データベース管理において、システムの仕様変更やセキュリティポリシーの改定に伴い、作成済みのユーザー名を変更する必要が生じることがあります。ユーザーを削除して再作成する方法では、既存の権限設定が失われ、再設定の手間が発生してしまいます。MariaDBで提供されているRENAME USER文を利用すれば、権限を維持したまま、ユーザー名のみを安全かつ効率的に変更することが可能です。
基礎知識
MariaDB(MySQL含む)におけるユーザーは、「ユーザー名」と「接続元ホスト名」の組み合わせ(例:user@localhost)で識別されます。RENAME USER文は、このユーザー名部分を更新するための専用コマンドです。このコマンドの最大のメリットは、既存のユーザーに付与されているアクセス権限(GRANT)が、新しいユーザー名に対してそのまま引き継がれる点にあります。これを知っておくことで、ユーザー管理の運用コストを大幅に削減できます。
実装/解決策
ユーザー名を変更する際は、対象のユーザーが現在接続されていないことを確認し、以下の書式で実行します。
RENAME USER ‘旧ユーザー名’@’ホスト名’ TO ‘新ユーザー名’@’ホスト名’;
複数のユーザーを同時に変更することも可能ですが、実務では誤操作を防ぐため、一つずつ確実に実行することを推奨します。変更後は、必ずmysql.userテーブルを参照し、想定通りに変更されているか確認しましょう。
サンプルプログラム
以下は、実務で頻繁に行われる「開発用ユーザーを本番用名義へ変更する」というシナリオを想定したコマンド例です。
— 1. 現在のユーザー一覧を確認し、変更対象を確認する
SELECT user, host FROM mysql.user;
— 2. ユーザー名を ‘dev_user’ から ‘prod_user’ に変更する
— ※必ず対象のホスト名(localhostなど)を含めて指定してください
RENAME USER ‘dev_user’@’localhost’ TO ‘prod_user’@’localhost’;
— 3. 変更が正しく反映されたか確認する
SELECT user, host FROM mysql.user WHERE user = ‘prod_user’;
— 4. (参考)権限が引き継がれているか確認する
SHOW GRANTS FOR ‘prod_user’@’localhost’;
応用・注意点
実務における注意点は以下の2点です。
1. 権限の継承範囲: RENAME USERはユーザー名の変更のみを行います。もし古いユーザー名に関連付けられた「ストアドプロシージャのDEFINER」や「ビューの作成者」などが存在する場合、それらの設定は自動的に新ユーザー名へ追従しないことがあります。重要なオブジェクトを所有しているユーザーを変更する場合は、事前に該当オブジェクトのDEFINER設定を精査してください。
2. 接続中のセッション: 対象ユーザーがデータベースに接続したままの状態でRENAME USERを実行すると、予期せぬエラーやセッションの切断が発生する可能性があります。変更作業を行う際は、該当ユーザーの接続を事前に遮断(KILLコマンドなど)し、メンテナンス時間を確保することをお勧めします。

コメント