MySQLでリモート接続を許可する方法|セキュリティ対策とOS別設定手順を徹底解説
MySQLデータベースを運用している方なら、セキュリティの維持がいかに大変かを実感されていることでしょう。SQLインジェクションによる不正アクセスやブルートフォース(総当たり)攻撃など、特にリモートでデータベースを扱う場合、データを安全に守るのは決して簡単ではありません。
SQLサーバーでリモート接続を許可する設定方法はいくつかありますが、慎重に行う必要があります。MySQLサーバーでリモート接続を許可すると、ハッカーにとって格好の標的になる可能性があるからです。MySQLデータベースへの安全なリモート接続を実現するために、知っておくべきポイントを詳しく解説します。

作業を始める前に
MySQLデータベースに変更を加える前に、必ずデータベースのバックアップを取得してください。特に本番環境(稼働中のサーバー)で作業する場合は重要です。データベースやホストサーバーへの変更は、トラブル発生時に深刻なデータ損失につながる恐れがあります。
また、接続設定の変更によって、変更後にサーバーへアクセスできなくなるケースもあります。その際はサーバー管理者に相談し、サポートを受ける必要があるかもしれません。変更内容が正しく動作するかどうか、まずローカル環境のMySQLサーバーで検証してからリモートに適用するのがおすすめです。
リモートサーバーの設定を変更するには、安全な接続手段も必要です。SSH(Secure Shell)を使うのが最も確実な方法で、リモートサーバーに接続できます。Raspberry Piなどローカルネットワーク上のサーバーへの接続にも利用可能です。

このガイドでは、MySQLでリモート接続を許可する手順を順番に説明します。作業開始前に、MySQLサーバーが稼働しているサーバーへ直接またはリモートでアクセスできることを確認してください。
例えばSSH経由でサーバーにアクセスできない場合、rootアカウントがすでにリモート接続を許可していない限り、MySQLの設定を直接変更することはできません。まず接続環境を整えてから作業を進めましょう。
MySQL設定ファイルの編集
MySQLでリモート接続を許可する第一歩は、MySQLの設定ファイルを編集することです。以降の手順では、MySQLデータベースをホストするサーバーやPC・Macにリモート接続し、コンソールへアクセスできているものとして進めます。
ローカルのMySQLサーバーを設定する場合は、MacやLinuxならターミナルを開き、Windowsならテキストエディタを使用します。
- まず、お好みのコンソール用テキストエディタでMySQLの設定ファイルを編集します。Linuxの場合、ターミナルまたはSSHウィンドウでsudo nano /etc/mysql/mysql.conf.d/mysqld.cnfと入力し、nanoエディタでファイルを開きます(MySQLがデフォルトの場所にインストールされている場合)。

- Windowsの場合は、エクスプローラーでMySQLのインストールフォルダ(例:C:/Program Files/MySQL/MySQL Server 8.0)を開きます。my.iniファイルをダブルクリックして、既定のテキストエディタ(メモ帳など)で開いてください。ファイルが存在しない場合は新規作成します。

- Macの場合はターミナルを開き、sudo nano /usr/local/etc/my.cnfと入力します。HomebrewでMySQLをインストールした場合のデフォルト設定ファイルです。

上記はいずれも設定ファイルのデフォルト配置場所です。コマンドが機能しない場合は、my.cnf・mysqld.cnf・my.iniなどのファイル名を手動で検索し、実際のパスを確認してください。
安全なバインドアドレス(bind-address)の設定
- 設定ファイルを開いたら、矢印キーでbind-addressの項目まで移動します。このIPアドレス設定はデータベースへの接続元を制限するもので、通常は127.0.0.1(ローカルマシンのみ許可)に設定されています。

- 同じインターネット回線を利用するデバイスからの接続を許可したい場合は、まず自分のグローバルIPアドレスを確認し、127.0.0.1をそのIPアドレスに置き換えます。特定のデバイスやサーバーだけを許可したい場合は、そのIPアドレスを指定します。

- 状況によっては、すべてのリモート接続を許可したい場合もあるかもしれません。しかし、これは極めて高いリスクを伴うため、本番サーバーでは絶対に使用しないでください。どうしても設定する場合は、127.0.0.1を0.0.0.0に変更します。

- Basic Settingsセクション内のport値も控えておきましょう。次のセクションで必要になります。表示されていない場合はデフォルトの3306が使われます。独自のポートを設定したい場合は、新しい行にport = xxxxと追加し、任意のポート番号を指定してください。

- bind-addressの設定が完了したらファイルを保存します。LinuxではCtrl + Oで保存しCtrl + Xで終了、MacではCommand + OとCommand + Xを使用します。Windowsユーザーは「ファイル」>「保存」を選択してください。

- 次に、LinuxおよびMacユーザーはmysql.server stop && mysql.server startまたはmysql.server restartと入力してMySQLを再起動します。権限が必要な場合はsudoを付与し(例:sudo mysql.server restart)、mysql.serverファイルへの適切なパス(例:/usr/local/bin/mysql.server)を指定してください。

- 上記のコマンドが機能しない場合は、代わりにsudo service mysql restartを試してください。

- WindowsでMySQLを再起動するには、スタートメニューを右クリックして「Windows PowerShell(管理者)」を開きます。PowerShellウィンドウでnet stop mysql80と入力し、続けてnet start mysql80を実行します。「mysql80」の部分はお使いのPCの正しいサービス名に置き換えてください。

Windowsでサービス名がわからない場合は、net startと入力すれば一覧を確認できます。設定を再読み込みできないときは、サーバー自体を再起動し、必要に応じて手動でMySQLを起動してください。
ファイアウォールの設定
ここまでの設定で、MySQL構成ファイルのbind-addressに指定したIPアドレスからのリモート接続が許可されます(0.0.0.0を設定した場合はすべてのデバイスから)。ただし、接続はまだデバイスやネットワークのファイアウォールによってブロックされています。
ほとんどのサーバーやPCは、特定のポートへのアクセスが許可されていない限り接続をブロックするファイアウォールを採用しています。設定手順は、WindowsとLinuxのどちらでMySQLを運用しているかによって異なります。Macのファイアウォールはデフォルトで無効化されているため、追加の設定は不要です。
Linuxファイアウォールの設定
多くのLinuxサーバーでは、iptablesがデフォルトのファイアウォールユーティリティとして採用されています。以下の手順で設定しましょう。
- ターミナルまたはSSH接続を開き、sudo iptables -A INPUT -p tcp -s X.X.X.X --dport YYYY -j ACCEPTと入力します。X.X.X.XにはMySQL接続の許可元となるデバイスのIPアドレスを、YYYYにはMySQL設定ファイルのポート番号(例:3306)を指定してください。

- この設定は一時的なものです。Debian系やUbuntu系のLinuxサーバーでは、sudo netfilter-persistent saveとsudo netfilter-persistent reloadをターミナルで実行することで、設定を永続化できます。

iptablesがお使いのディストリビューションの標準ファイアウォールツールでない場合は、ディストリビューションのユーザーマニュアルを参照してください。必要なパッケージ(netfilter-persistentなど)がインストールされていない場合は、各ディストリビューションのソフトウェアリポジトリツールで導入できます(例:sudo apt install netfilter-persistent)。
Windowsファイアウォールの設定
WindowsのPCやサーバーでデータベースをホストしている場合は、以下の手順でファイアウォールを設定します。
- スタートメニューを右クリックし、「ファイル名を指定して実行」を選択します。

- 「実行」ボックスにwf.mscと入力し、「OK」をクリックします。

- 「セキュリティが強化された Windows Defender ファイアウォール」ウィンドウで、「受信の規則」>「新しい規則」を選択します。

- 「新規の受信の規則ウィザード」で「ポート」を選択し、「次へ」をクリックします。

- 次の画面で「TCP」を選択し、3306(またはMySQL設定ファイルに記載されたポート番号)を入力して「次へ」をクリックします。

- 「操作」画面では、デフォルトの「接続を許可する」が選択されたまま「次へ」をクリックします。

- 規則をすべてのネットワークの種類に適用することを確認し、「次へ」をクリックします。

- わかりやすい規則名(例:MySQL)を入力し、「完了」をクリックしてファイアウォール規則の一覧に追加します。

接続に問題がある場合は、同じ内容(ポート3306など)で送信の規則も新規作成してみてください。また、ローカルネットワークのルーター設定で必要なポートを開放し、データベースへの inbound/outbound 接続を許可する必要がある場合もあります。
MySQLでリモートサーバーに接続する
リモート接続の許可設定が完了したら、実際に接続を確立してみましょう。ターミナルやPowerShellウィンドウからmysqlコマンド(Windowsではmysql.exe)を使用します。
Windowsの場合、事前にMySQLがローカルにインストールされている必要があります。MacユーザーはHomebrewでターミナルから(brew install mysql)、Linuxユーザーは各ディストリビューションのパッケージ管理システム(例:sudo apt install mysql)から必要なパッケージをインストールしてください。
Linux・MacでMySQLに接続する
- MacまたはLinuxからリモートMySQLサーバーに接続するには、新しいターミナルウィンドウを開き、mysql -u username -h X.X.X.X:XXXX -pと入力します。X.X.X.X:XXXXにはリモートサーバーのIPアドレスとポート番号(例:100.200.100.200:3306)、usernameにはMySQLのユーザー名を指定してください。

- パスワードの入力を求められたら入力します。接続に成功すると、ターミナルに成功メッセージが表示されます。
WindowsでMySQLに接続する
- WindowsからリモートMySQLサーバーに接続するには、スタートメニューを右クリックして「Windows PowerShell(管理者)」を開きます。

- PowerShellウィンドウでcd "C:\Program Files\MySQL\MySQL Workbench 8.0\"と入力し、該当フォルダへ移動します。パスはお使いのPCのインストール先に合わせてください。たとえばMySQLのバージョンが8.0.1であれば、「MySQL Workbench 8.0.1」フォルダを指定します。

- 続けて.\mysql.exe -u username -h X.X.X.X:XXXX -pと入力します。X.X.X.X:XXXXにはリモートサーバーのIPアドレスとポート番号(例:100.200.100.200:3306)、usernameにはリモートアクセスを許可されたMySQLユーザー名(例:root)を指定します。画面の指示に従ってください。
- パスワードを求められたら入力し、サインインを完了させると、リモートからMySQLデータベースへアクセスできます。

うまくいかない場合は、SSH経由(または直接アクセス)でMySQLサーバーをホストしているサーバーやPCに接続し、-h localhostオプションを付けてログインしてください。その後、後述の手順で適切なユーザーアカウントを作成できます。
MySQLデータベースへのリモートユーザーアクセスを許可する
ここまでの手順で、rootアカウントなど特権を持つユーザーによるリモート接続が可能になっているはずです。しかしこのレベルのアクセス権は安全性が低いため、より制限された専用アカウントを作成することをおすすめします。
このアカウントはMySQLサーバーへのアクセスが限定され、選択したデータベースのみを操作できます。他のデータベースへのアクセスや新しいユーザーアカウントの作成など、重大な変更を行うことはできません。
作業には、MySQLサーバーへリモートでサインインできることが前提となります。rootアカウントでリモートログインできない場合は、SSH接続経由で、またはサーバー本体に直接アクセスしてmysqlコマンドでシェルを開いてください。
- リモートのMySQLシェル(mysqlツール)で、CREATE USER "username"@"x.x.x.x" IDENTIFIED BY "password";と入力し、Enterキーを押します。usernameには作成するユーザー名、x.x.x.xには接続元のIPアドレス、passwordには適切なパスワードを指定してください。

- 次に、新しいアカウントへ必要な権限を付与します。GRANT ALL ON databasename.* TO username@"x.x.x.x";と入力し、databasename・username・x.x.x.xを実際の情報に置き換えてください。すべてのデータベースへのアクセスを許可したい場合は、databasenameを*に変更します。

権限の付与が完了したら、前述の接続手順に従い、新しいアカウント(例:mysql -u username -h X.X.X.X:XXXX -p)でリモートサーバーへ接続できるか確認しましょう。
データベースのデータを守るために
MySQLをはじめとするSQLデータベースを運用するうえで、接続のセキュリティを維持することは非常に重要です。有効な対策のひとつが、推測されやすい旧式のパスワードに頼らず、サーバーへのリモートアクセス用にSSH鍵を生成して認証することです。
データ損失が心配な場合は、データベースをオンラインで簡単にバックアップできます。多くのデータベースはLinuxサーバーで稼働しているため、Linuxのファイルバックアップを自動化するとよいでしょう。WindowsでMySQLを運用している場合も、同様の自動バックアップ体制を構築すれば、緊急時でも迅速にデータを復元できます。
-
Macからリモートサーバーやローカルサーバーに接続する方法を徹底解説
Macをローカルサーバーやリモートサーバーに接続すると、そのサーバー上にあるすべてのファイルにアクセスできるようになります。macOSには標準でサーバー接続機能が搭載されており、特別な設定や制限なしに、Macから任意のサーバーへ接続可能です。接続後は、サーバーが通常のディスクドライブと同じようにFinderに表示され、ファイルの閲覧・編集・削除まで自由に行えます。 サーバーをストレージとしてマウントする方法は複数あります。macOSに組み込まれた標準機能を使う方法のほか、サードパーティ製アプリを利用してサーバーにアクセスすることもできます。この記事では、それぞれの方法をわかりやすく解説します。
-
Windows 10 PCでリモートデスクトップ接続を有効にする方法
デスクを離れて作業しているときでも、Windowsの「リモートデスクトップ接続」を使えば、いつも使っているPCにアクセスできます。着信接続を許可しておけば、Windows、Mac、iOS、Androidなど、別のデバイスからPCを遠隔操作できるようになります。なお、この機能を利用するにはWindows 10 ProまたはEnterpriseエディションが必要です。リモートデスクトップを有効にする手順まず「Windows + I」キーで設定アプリを開き、「システム」カテゴリをクリックします。左側メニューの一番下にある「リモートデスクトップ」ページを選択しましょう。画面上部の「リモートデスクトップ