【MySQL】MySQLの外部接続を許可する

MySQL
外部接続できた様子

外部からMySQLのDBに接続できるようにします。
外部接続用のユーザを作成し、そのユーザで外部接続します。

環境

 OS ubuntu22.04 (VMWare Workstation 17上で稼働)
 DB MySQL 8.0.34-0
 DB接続アプリ A5:SQL Mk-2 (サイトはこちら 松原正和様作 を使わせていただきました)

現状の確認

 windowsからデータベース外部接続アプリケーションSQL Mk-2を使用してubuntu上のMySQLに接続しようとすると「コンピュータによって拒否されたため、接続できませんでした。」というエラーが表示されます。

対象のコンピュータに拒否され接続できないというエラーが出ています。

調べてみたところ、MySQLは初期設定だと外部接続できないようですので、接続できるようにします。

MySQLの設定変更

 探してみたところ、MySQLの設定ファイルは、
  /etc/mysql/mysql.conf.d/mysqld.cnf
にありました。(mysql.conf.dってフォルダなんですね…)
 ここにローカル接続しかできない設定があるので、
 bind-address = 127.0.0.1
の一行だけ
 #bind-address = 127.0.0.1
コメントアウトします。
 次のコマンドを入力し、MySQLを再起動させます。

$ > sudo service mysql restart

MySQLに外部接続用のユーザを作成する

次のコマンドを入力してMySQLを起動させます。

$ > mysql -u root -p
Enter Password: *****
mysql > 

 外部接続用のユーザ(今回は「remort_user」)は次のように作成してください。

CREATE USER 'remort_user'@'%' IDENTIFIED BY 'password';

 この「@」以降には接続ユーザのドメイン名を登録します。
 %はワイルドカードですので、どこからでも接続できるユーザとなります。
 パスワードは、ポリシーに注意して指定しください。

外部接続用のデータベース作成

既存のデータベースに許可を与える場合は、この項を飛ばしてください。
次のコマンドで外部接続するためのデータベースを作ります。

mysql > create database remort_db;

データベースに接続権限を付与する

 データベースを指定して接続権限を付与する場合には、次のコマンドを入力してください。

GRANT ALL PRIVILEGES ON remort_db.* TO 'remort_user'@'%';

 すべてのデータベースの外部接続権限を付与する場合は次のコマンドを入力してください。
 公開環境では全てのデータベースへの接続権限を付与するのは危険ですので、必要なデータベースだけにするべきです。

GRANT ALL PRIVILEGES ON *.* TO 'remort_user'@'%';

 なお、権限は
  ALL 閲覧と書込み可能
  SELECT 閲覧のみ可能
となっています。
 権限を確認するには次のコマンドを実行してください。

mysql > show grants for 'remort_user'@'%';
+-----------------------------------------------------------+
| Grants for remort_user@%                                  |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO `remort_user`@`%`                   |
| GRANT ALL PRIVILEGES ON `remort_db`.* TO `remort_user`@`%`|
+-----------------------------------------------------------+
2 rows in set (0.00 sec)

確認

 A5:SQL Mk-2を使用してubuntu上のMySQLに接続すると次のように表示され、DBと外部接続できていることがわかります。

接続に成功しました。と表示されている様子。
(画像はユーザ名等一部変更しています)