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 ユーザで動かそうとした場合も同様です。
ディスカッション
コメント一覧
まだ、コメントがありません