はじめに
久しぶりにMySQLをAzure VMのUbuntu20.04にインストールする機会がありました。
そこで、気になったことがありました。
インストール後にmysql_secure_installation を行うのですがrootパスワードが設定されない。
何故だろうを確認したところ設定されていない。
mysql> select user, host, authentication_string from mysql.user; +------------------+-----------+------------------------------------------------------------------------+ | user | host | authentication_string | +------------------+-----------+------------------------------------------------------------------------+ | debian-sys-maint | localhost | $A$005$>uffp6}=tz3^J1kAuA/kXSYTliNplLwplTSS2hKelmoT36qNnD488ZpKro8 | | mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | root | localhost | | +------------------+-----------+------------------------------------------------------------------------+
不思議です。
ちなみにバージョンは Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
パスワード設定
なんにせよパスワードが設定されていないのでは問題なのでパスワードを設定します。
update mysql.user set password=password('password') where user = 'root';
ALTER USER 'root'@'localhost' identified BY 'password';
これらを実行してもうまくいきません。
下記でMySQL8のパスワード変更について議論されています。
-
phpMyAdmin on MySQL 8.0 - Stack Overflow
UPDATE Newer versions of phpMyAdmin solved this issue. I've successfully tested with phpMyAdmin 5.0. ...
stackoverflow.com
MySQLにログインしてから設定
デフォルトの認証用プラグインを変更する必要があります。
/etc/mysql/mysql.conf.d/mysqld.cnf
以下を追記してプラグインを変更します。
default_authentication_plugin=mysql_native_password
MySQLを再起動します。
systemctl restart mysql
MySQLに接続します。
mysql -uroot -p
{PASSWORD}を設定します。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '{PASSWORD}';
設定されたか確認します。
rootにハッシュが入力されていれば設定されたことを示します。
mysql> select user, host, authentication_string from mysql.user; +------------------+-----------+------------------------------------------------------------------------+ | user | host | authentication_string | +------------------+-----------+------------------------------------------------------------------------+ | debian-sys-maint | localhost | $A$005$>uffp6}=tz3^J1kAuA/kXSYTliNplLwplTSS2hKelmoT36qNnD488ZpKro8 | | mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | mysql.session | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | mysql.sys | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | root | localhost | *929D791403F393B43E9C36D4F32E9EDE5EEC2EE1 | +------------------+-----------+------------------------------------------------------------------------+
違うパスワードを入力して接続できないことを確認しましょう。
mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
まとめ
クラウドを利用しているとMySQLを一から設定する機会はほとんどなくなりました。久しぶりにインストールしてみてハマったことを共有しました。
ちなみにCentOS8(今年でサポート終了だけど)でも確認してみましたがmysql_native_password
が設定されていました。mysql_secure_installation
をセットアップを行うように様々なサイトで紹介されていますが、パスポートが設定されないことにあまり言及されている様子がないのが不思議です。
今回、紹介した方法が正解なのかはちょっと分かりませんが参考にしてもらえればと思います。