導入
データベース管理者(DBA)として、phpMyAdminのようなGUIツールは非常に便利ですが、本番環境ではセキュリティポリシーや運用フローの都合上、GUIが使えないケースも多々あります。また、コマンドラインでの操作は作業の履歴(ログ)を残しやすく、自動化やスクリプト化が可能という大きなメリットがあります。今回は、現場で即戦力となる「SQLコマンドによるパスワード変更」の作法を解説します。
基礎知識
MySQLにおいて、ユーザーのパスワード管理はmysqlデータベースのuserテーブルで行われています。かつてはUPDATE文で直接書き換える手法もありましたが、MySQL 5.7以降ではセキュリティ強化のため、専用のALTER USER構文を使用することが強く推奨されています。この構文を使うことで、認証プラグインの考慮やパスワードのハッシュ化が確実に行われます。
実装/解決策
パスワード変更の際は、以下の手順を推奨します。
1. 管理者権限(rootなど)でMySQLにログインする。
2. ターゲットユーザーを確認し、ALTER USER構文でパスワードを更新する。
3. 変更を即座に反映させるため、FLUSH PRIVILEGESコマンドを実行する(※ALTER USERを使用する場合は必須ではありませんが、権限操作の慣習として推奨されます)。
サンプルプログラム
以下のSQLを実行することで、特定のユーザーのパスワードを変更可能です。環境に合わせてユーザー名とホスト部分を書き換えてください。
— 1. rootなどの特権ユーザーでMySQLにログイン後、以下のSQLを実行します
— ‘username’と’localhost’を対象のユーザー情報に書き換えてください
ALTER USER ‘username’@’localhost’ IDENTIFIED BY ‘NewStrongPassword123!’;
— 2. 権限キャッシュをリロードして変更を確実に反映させます
FLUSH PRIVILEGES;
— 3. (参考)変更が正しく適用されたか確認する場合は以下のクエリで確認可能です
SELECT user, host, plugin FROM mysql.user WHERE user = ‘username’;
応用・注意点
現場で事故を防ぐための重要な注意点を挙げます。
1. 認証プラグインの確認
MySQL 8.0以降ではデフォルトの認証プラグインが「caching_sha2_password」になっています。古いアプリケーションから接続する場合、パスワード変更後に接続エラーが発生することがあります。その場合は、必要に応じて「IDENTIFIED WITH mysql_native_password BY ‘…’」と明示的に指定してください。
2. パスワードの複雑性ポリシー
「validate_password」プラグインが有効な場合、単純すぎるパスワード(例: 1234など)は拒否されます。エラーが出る場合は、現在のポリシー設定を「SHOW VARIABLES LIKE ‘validate_password%’;」で確認してください。
3. 履歴の管理
GUI操作と異なり、コマンド操作は「.mysql_history」ファイルに履歴が残ります。このファイルには平文のパスワードが含まれる可能性があるため、作業後は適切にファイルをクリアするか、アクセス権限を厳格に管理することを強く推奨します。

コメント