部署変更や転職、
今回はMySQL 8.
デュアルパスワードとは?
こちらはMySQL 8.
- プライマリーパスワードを登録する
(現在のパスワードはセカンダリーパスワードに変更される) - 登録したプライマリーパスワードがスレーブに伝搬するのを待つ
- アプリケーション側で使用しているパスワードをプライマリーパスワードに変更する
- 問題がなければセカンダリーパスワードを破棄する
- スレーブに伝搬したら完了
プライマリーパスワードを新しく登録した時に、
以下では、
プライマリーパスワードを登録する
プライマリーパスワードを設定するには、ALTER USER
文を利用していきます。構文としては以下のように設定することができます。
ALTER USER 'appuser1'@'host1.example.com'
IDENTIFIED BY 'password_b'
RETAIN CURRENT PASSWORD;
今までのALTER USER
文との違いとしては、RETAIN CURRENT PASSWORD
句が追加されていることがわかります。このALTER USER
文が実行されると、
実際にプライマリーパスワードを登録して、
まずはユーザの作成を行います。CREATE USER
権限があるユーザで実行しましょう。
$mysql -uroot -p 〈省略〉 mysql> CREATE USER 'appuser1'@'localhost' IDENTIFIED BY 'Password_1'; Query OK, 0 rows affected (0.01 sec)
作成したユーザでログインができるか確認してみましょう。
$ mysql -uappuser1 -pPassword_1 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 8.0.15 MySQL Community Server - GPL 〈省略〉 mysql>
ということで、RETAIN CURRENT PASSWORD
を使ってPassword_
$mysql -uroot -p 〈省略〉 mysql> ALTER USER 'appuser1'@'localhost' IDENTIFIED BY 'Password_2' RETAIN CURRENT PASSWORD; Query OK, 0 rows affected (0.01 sec)
ここで、
$ mysql -uappuser1 -pPassword_1 〈省略〉 mysql> exit Bye $ mysql -uappuser1 -pPassword_2 〈省略〉 mysql>
上記から、Password_
がセカンダリーパスワードになっています。
ちなみに、RETAIN CURRENT PASSWORD
句を追加せずに通常のALTER USER
文を実行した場合には、
$mysql -uroot -p 〈省略〉 mysql> ALTER USER 'appuser1'@'localhost' IDENTIFIED BY 'Password_3'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye $ mysql -uappuser1 -pPassword_1 〈省略〉 mysql> exit Bye $ mysql -uappuser1 -pPassword_2 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'appuser1'@'localhost' (using password: YES) $ mysql -uappuser1 -pPassword_3 〈省略〉 mysql>
上記から、RETAIN CURRENT PASSWORD
句を使わずにパスワードを変更すると、Password_
が上書きされた様子がわかります。
セカンダリーパスワードを破棄する
デュアルパスワードを設定して、ALTER USER
文を利用していきます。
構文は以下のとおりです。
ALTER USER 'appuser1'@'host1.example.com'
DISCARD OLD PASSWORD;
こちら実際に試してみましょう。現在はPassword_
がプライマリーパスワードで、Password_
がセカンダリーパスワードとして登録されている状態です。
$mysql -uroot -p 〈省略〉 mysql> ALTER USER 'appuser1'@'localhost' DISCARD OLD PASSWORD; Query OK, 0 rows affected (0.00 sec)
上記のコマンドが実行終わった状態で、
$ mysql -uappuser1 -pPassword_1 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'appuser1'@'localhost' (using password: YES) $ mysql -uappuser1 -pPassword_3 〈省略〉 mysql>
上記から、Password_
を利用してログインできなくなっていることがわかると思います。
必要な権限に関して
この機能を利用するにあたって必要な権限としては、CREATE USER
権限を持っている、APPLICATION_
権限を持っている必要があります。APPLICATION_
の権限を持つと、
注意点
この機能を利用するにあたっては、mysql.
の構造が2つのパスワードが持てるように変更されるため、mysql_
の実行とサーバの再起動が必要となるので注意をしましょう。
まとめ
今回はMySQLのデュアルパスワード機能について紹介しました。この機能を使うと、
難点としましては、