Ubuntu 18.04 で MySQL 5.7 をインストールしたときの注意点

最初にまとめ

インストール後にデータベースを作ったり、ユーザーを作ったりするときには

sudo mysql -u root

を実行します。

解説

Ubuntu 18.04 で MySQL サーバ(5.7)をインストールする際に実行するスクリプトの中で

ALTER USER 'root'@'localhost' IDENTIFIED WITH 'auth_socket';

を実行するように指定されています。この IDENTIFIED WITH 'auth_socket' ですが、MySQL のユーザ名と OS のユーザ名が一致している場合に接続を許可するという認証方式を root ユーザに適用するという意味です(詳しくはマニュアル参照)。

SELECT user, host, plugin FROM mysql.user;

を実行すると

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+

こんな感じになっているはずです。

Ubuntu の場合、root という名前のユーザを作成することはできないので、この認証方式を利用する限り sudo を付ける必要があります。

このままだと、IDE などを使ってデータベースを操作する際に面倒なので、設定を変更する必要があります。

正攻法(ユーザの追加)

root ユーザの権限を考えると、むやみに root を使わせるのではなく、必要に応じて権限を付与したユーザを作成していくのがセキュリティ的には正しい方法といえます。

CREATE USER 'hoge'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON example_db.* TO 'hoge'@'localhost';

もちろん、

GRANT ALL ON *.* TO 'hoge'@'localhost';

とかしてしまえば、root ユーザだけを保護しても意味がないわけですが。

別の方法(root もパスワードで接続できるようにする)

root ユーザでパスワードを使って接続できるようにしたい場合には、パスワードの設定だけでなく、認証方式もあわせて変更しなければなりません。したがって下記の構文となります。

ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'password';

おわりに

Ubuntu で MySQL サーバをインストールしたものの、サーバへの接続方法がわからない、とか、mysql_secure_installation コマンドを使ってパスワードを設定してみても IDE からデータベースに接続できない(Access denied for user 'root'@'localhost' と怒られる)ときは、設定を確認してみてください。phpmyadmin を root ユーザで動かそうとした場合も同様です。

この記事を書いた人

グッドネイバー

“ Webに悩むお客さまの「よき隣人」でありたい ” をモットーに、Web システム開発(主に Laravel)、Web マーケティング支援の仕事をしています。詳しい業務内容はこちら。お仕事のご依頼・ご相談はこちらからお気軽にどうぞ。