1. 導入
データベースのセキュリティを維持する上で、パスワードの定期的な変更や適切かつ強固な管理は不可欠です。MySQLではユーザーのパスワードを変更するために複数の方法が用意されていますが、実務においては「どの構文が適切か」「誤操作をどう防ぐか」という視点が重要です。本稿では、MySQLでのパスワード変更方法と、セキュリティを強化するための「現在のパスワード確認」の設定について解説します。
2. 基礎知識
MySQLにおいてユーザーの認証情報はユーザーテーブル(mysql.user)に格納されています。パスワードの変更には主に以下の2つのコマンドが使われます。
SET PASSWORD文:ユーザーのパスワード設定に特化したコマンドです。
ALTER USER文:ユーザーアカウントの属性を変更するコマンドで、パスワード変更はその機能の一部です。
近年のMySQLでは、アカウント管理を柔軟に行えるALTER USER文の使用が推奨されています。
3. 実装/解決策
実務現場では、パスワード変更時に「現在設定されているパスワード」を知っていること(本人確認)を必須にすることで、セキュリティを向上させることができます。
PASSWORD REQUIRE CURRENTオプションを使用すると、パスワード変更時に旧パスワードの照合を強制できます。これにより、万が一セッションを放置してしまった場合でも、第三者による不正なパスワード変更を防止できます。
4. サンプルプログラム
以下に、パスワード変更の基本形と、実務で推奨される「現在パスワードを必須とする」設定の実行例を示します。
-- 1. 基本的なパスワード変更(ALTER USERを使用) -- 'honda@localhost'のパスワードを'NewSecurePass123'に変更します ALTER USER 'honda'@'localhost' IDENTIFIED BY 'NewSecurePass123'; -- 2. セキュリティ強化:パスワード変更時に現在のパスワード入力を必須化 ALTER USER 'honda'@'localhost' PASSWORD REQUIRE CURRENT; -- 3. 旧パスワードを入力してパスワードを変更する(必須化後の実行例) -- 'OldPass123'が現在のパスワード、'NewPass456'が新しいパスワードです ALTER USER 'honda'@'localhost' IDENTIFIED BY 'NewPass456' REPLACE 'OldPass123';
5. 応用・注意点
現場で運用する際に注意すべきポイントをまとめました。
・管理者権限の挙動:PASSWORD REQUIRE CURRENTを設定していても、MySQLのルート権限(SUPER権限等)を持つ管理者は、現在のパスワードを入力せずにパスワードを変更可能です。これは緊急時のリカバリを考慮した仕様です。
・ログの取り扱いに注意:SQL実行ログ(general_log)やヒストリファイル(.mysql_history)にパスワードが平文で残る可能性があります。本番環境で直接パスワードを入力する際は、コマンド履歴を削除するなどの対策を検討してください。
・パスワードポリシーの併用:単に変更手順を厳格にするだけでなく、プラグイン(validate_password)を導入して「パスワードの長さ」や「記号の混在」を強制することも、DBAとして検討すべき重要なセキュリティ対策です。

コメント