MySQLへのリモート接続を許可する方法

MySQLデータベース(MySQL database)を使用している場合は、データベースを安全に保つために直面​​する課題をすでに認識しています。SQLインジェクションを使用したデータベースハッキングの試みからブルートフォース攻撃まで、特にデータベースをリモートで操作している場合は、データを安全に保つことは困難です。

リモート接続を許可するようにSQL(SQL)サーバーを構成する方法はいくつかありますが、 MySQLサーバーでリモート接続を許可すると、データベースがハッカーの標的になりやすいため、注意が必要です。MySQLデータベースへの安全なリモート接続を許可する場合は、次のことを知っておく必要があります。

あなたが始める前に(Before You Begin)

MySQLデータベースに変更を加える前に、データベースをバックアップする(backup your database)ことが重要です。特に、運用サーバー(アクティブに使用されているサーバー)で作業している場合は重要です。データベースまたはデータベースをホストしているサーバーに変更を加えると、問題が発生した場合に重大なデータ損失が発生する可能性があります。

また、サーバーの接続を変更すると、後でサーバーにアクセスできなくなる場合があります。これが発生した場合は、さらにサポートを受けるためにサーバー管理者に相談する必要がある場合があります。リモートで試す前に、ローカルで実行されているMySQLサーバーで変更を試し、変更が機能するかどうかを確認することをお勧めします。(MySQL)

また、リモートサーバーに変更を加える場合は、接続して変更を加えるための安全な方法が必要になる可能性があります。SSH(Secure Shell)は、リモートサーバーに接続できるため、これを行うための最良の方法であることがよくあります。SSHを使用(SSH)して、RaspberryPiでホストされて(hosted on a Raspberry Pi)いるサーバーなどのローカルネットワーク上のサーバーに接続することもできます。

このガイドでは、リモート接続を許可するようにMySQLを構成する手順について説明しますが、最初にMySQLサーバーをホストしているサーバーに直接またはリモートアクセスできることを確認する必要があります。

たとえば、 (Suppose)SSH経由でサーバーにリモートアクセスできないとします。その場合、ルートmySQLアカウントがすでにリモート接続を許可していない限り、リモート接続を直接許可するようにMySQLデータベースを構成することはできません。したがって、先に進む前に、まずこの接続を確立する必要があります。

MySQL構成ファイルの編集(Editing Your MySQL Configuration File)

リモート接続を許可するようにMySQLを構成する最初のステップは、 MySQL構成ファイルを編集することです。この段階までに、このガイドでは、mySQLデータベースをリモートでホスト しているサーバー、PC、またはMacにすでに接続しており、コンソールにアクセスできることを前提としています。(Mac)

または、 Mac(Mac)またはLinuxの場合はオープンターミナル、Windowsの場合はテキストエディタを使用して、ローカルMySQLサーバーを構成できます。

  1. まず、お好みのコンソールテキストエディタを使用して、MySQLデータベースファイルを編集します。Linuxでは(Linux)、ターミナルまたはSSHウィンドウに(SSH)sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf と入力して、 nanoエディターを使用してこのファイルを編集します( MySQLデータベースがデフォルトの場所にあると仮定します) 。 

  1. Windowsを実行している場合は、ファイルエクスプローラー(File Explorer)を開き、 MySQLインストールを含むフォルダーにアクセスします(例C:/Program Files/MySQL/MySQL Server 8.0)。エントリをダブルクリックして、デフォルトのテキストエディタ(メモ帳など)を使用して(Notepad)my.iniファイルを開きます。存在しない場合は、最初にファイルを作成します(create the file first)

  1. Macでは、ターミナルウィンドウを開き、sudonano/usr/local/etc/my.cnfと入力しsudo nano /usr/local/etc/my.cnfこれは、 homebrewを使用して(using homebrew)MySQLをインストールした場合のMySQLのデフォルトの構成ファイルです。

上記で参照されている場所は、MySQL構成ファイルのデフォルトの場所です。これらのコマンドが機能しない場合は、関連するファイル(my.cnfmysqld.cnf、またはmy.ini)を手動で検索して、関連するファイルパスを見つける必要があります。

安全なバインドアドレスIP範囲の設定(Setting a Safe Bind-Address IP Range)

  1. サーバーのMySQL(MySQL)構成ファイルを開いたら、キーボードの矢印キーを使用して、ファイルのbind-addressセクションにアクセスします。このIP範囲は、データベースへの接続を制限します。これは通常、127.0.0.1を使用するローカルマシンまたはサーバーからの接続のみを許可するように設定されています。

  1. 現在のインターネット接続を使用するデバイスからの接続を許可するようにMySQLデータベースを構成する場合は、最初にパブリックIPアドレスを見つけてから、 (find your public IP address)127.0.0.1をそのIPアドレスに置き換えます。または、接続を許可するデバイスまたはサーバーのIPアドレスに置き換えます。

  1. 状況によっては、 MySQL(MySQL)データベースへのすべての(all)リモート接続を許可したい場合があります。これには極度のリスクが伴うため(extreme risk)、実稼働サーバーでは使用しないでください。ただし、これを許可する場合は、127.0.0.10.0.0.0に置き換えます。

  1. [基本設定](Basic Settings)セクションでポート(port )値をメモします。これは次のセクションで必要になります。表示されていない場合は、デフォルト値であるポート3306が使用されます。port = xxxxxxxxを適切なポート値に置き換えることで、独自のポートを追加できます。

  1. MySQL構成ファイルで(MySQL)bind-addressを構成したら、ファイルを保存します。Linuxを使用している場合は、 Ctrl + O およびCtrl + X を選択してこれを行います。Macでは、Command + O およびCommand + Xを選択します。Windowsユーザーは、[ファイル](File ) >[保存](Save)を選択して保存できます。

  1. 次に、LinuxおよびMacユーザーは、 mysql.server stop &&mysql.serverstartまたはmysql.serverrestartと入力してMySQLを再起動できます。sudoを使用し(using sudo)てコマンドを昇格させ(例:sudo mysql.server restart)、mysql.serverファイルへの適切なパスを使用する必要がある場合があります(例:/usr/local/bin/mysql.server)。

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

  1. Windowsで(Windows)MySQLを再起動するには、 [スタート(Start)]メニューを右クリックし、 [ Windows PowerShell(管理者)(Windows PowerShell (Admin)) ]を選択して、新しいPowerShellウィンドウを開きます。PowerShellウィンドウで、netstopmysql80と(net stop mysql80 )入力してからnetstartmysql80と入力し、PC上のmysql80(mysql80)正しい(net start mysql80)サービス名に置き換えます。

Windowsで正しいサービス名がわからない場合は、netstartと入力(net start)して検索してください。構成を再ロードできない場合は、サーバーを再起動し、代わりに手動で(必要に応じて)MySQLをリロードします。(MySQL)

ファイアウォールの構成(Configuring Your Firewalls)

この段階で、MySQLデータベースは、 (MySQL)MySQL構成ファイルで(MySQL)bind-address値として設定したIPアドレスを使用するデバイスからのリモート接続を許可する必要があります(または、この値を0.0.0.0に設定した場合はすべてのデバイスから)。ただし、接続は引き続きデバイスまたはネットワークファイアウォール(device or network firewall)によってブロックされます。

ほとんどのサーバーとPCは、特定のポートへのアクセスが許可されていない限り、ファイアウォールを使用して接続をブロックします。これを構成する手順は、 Windows(Windows)Linuxのどちらで(Linux)MySQLを実行しているかによって異なります。Macファイアウォールはデフォルトで無効になっているため、ここで追加の手順を実行する必要はありません。

Linuxファイアウォールを構成する(Configure Linux Firewalls)

多くのLinuxサーバーは、デフォルトのファイアウォールユーティリティとしてiptablesを使用しています。(iptables)以下の手順で設定できます。

  1. ターミナルまたはSSH接続を開き、 sudo iptables -A INPUT -p tcp -s XXXX –dport YYYY-jACCEPTと入力します。XXXXを(X.X.X.X)MySQL接続(from)許可するデバイスのIPアドレスに置き換え、 YYYYを(YYYY )MySQL構成ファイル(例:3306)の一致するポート値に置き換えます。

  1. これにより、ファイアウォールが一時的に構成されます。DebianまたはUbuntuベースのLinuxサーバーを使用している場合は、ターミナルまたはSSHウィンドウにsudonetfilter-persistentsave(sudo netfilter-persistent reload )およびsudonetfilter-persistentreloadと入力して、この変更を永続的にします。(sudo netfilter-persistent save)

iptablesがLinuxディストリビューション(Linux)のデフォルトのファイアウォールツールでない場合、詳細についてはディストリビューションのユーザーマニュアルを参照する必要があります。特定のパッケージ(netfilter-persistentなど)が利用できない場合は、ディストリビューションのソフトウェアリポジトリツールを使用してインストールします(例:sudo apt install netfilter-persistent)。

Windowsファイアウォールを構成する(Configure Windows Firewalls)

Windows PCまたはサーバーを使用してデータベースをホストしている場合は、次の手順を使用してファイアウォールを構成できます。

  1. (Right-click)[スタート(Start)]メニューを右クリックして、 [ファイル名を指定して実行(Run)]を選択します。

  1. [実行(Run)]ボックスに「wf.msc」と入力し、[ (wf.msc)OK ]を選択します。

  1. Windows Defenderウィンドウで、[受信ルール](Inbound Rules ) >[新しいルール(New Rule)]を選択します。

  1. [新しいインバウンドルールウィザード](New Inbound Rule Wizard)ウィンドウで、[ポート](Port ) >[次へ(Next)]を選択します。

  1. 次のメニューで、オプションからTCPを選択し、 (TCP)3306 (または(3306 )MySQL構成ファイルにリストされているポート値)と入力して、[次へ(Next)]を選択します。

  1. [アクション(Action)]メニューで、デフォルトのオプションを[接続を(Allow the connection)有効にする]のままにして、[次へ(Next)]を選択します。

  1. ルールをすべてのネットワークタイプに適用することを確認してから、[次へ](Next)を選択します。 

  1. 提供されたポートにルールのわかりやすい名前(MySQLなど)を入力し、[(MySQL)完了(Finish)]を選択してファイアウォールルールのリストに追加します。

接続に問題がある場合は、上記の手順を繰り返し、同じ詳細(ポート3306など)を使用してファイアウォール設定で新しいアウトバウンドルールを作成してください。(outbound rule )また、データベースへのインバウンド接続とアウトバウンド接続を許可するため に必要なブロックされたポートを開く(open the necessary blocked ports)ようにローカルネットワークルーターを構成する必要がある場合もあります。

MySQLを使用したリモートサーバーへの接続(Connecting to a Remote Server Using MySQL)

リモート接続を許可するようにMySQL(MySQL)データベースを構成した後、実際にデータベースへの接続を確立する必要があります。これは、ターミナルまたはPowerShellウィンドウからmysqlコマンド(Windowsでは(Windows)mysql.exe )を使用して実行できます。

Windowsを実行している場合は、開始する前にMySQLがローカルにインストールされ(MySQL is installed locally)ていることを確認する必要があります。Macユーザーはターミナルからhomebrewを使用して(using homebrew)MySQLをインストールでき( (MySQL) brew install mysql)、Linuxユーザーはローカルアプリリポジトリ(例:sudo apt install mysql)を使用して必要なパッケージをインストールできます。

LinuxまたはMacでMySQLに接続する(Connecting to MySQL on Linux or Mac)

  1. MacまたはLinuxでリモートMySQLサーバーに接続するには、新しいターミナルウィンドウを開き、mysql -u username -h XXXX:XXXX-pと入力します。XXXX:XXXXをリモートサーバーのIPアドレスとポート番号(例:100.200.100.200(100.200.100.200:3306) :3306 )に置き換え、 usernameをMySQLユーザー名に置き換えます。

  1. プロンプトが表示されたら、パスワードを確認します。接続が成功すると、ターミナルに成功メッセージが表示されます。

WindowsでMySQLに接続する(Connecting to MySQL on Windows)

  1. Windows上のリモートMySQLサーバーに接続するには、 [スタート(Start)]メニューを右クリックし、 [ Windows PowerShell(管理者)(Windows PowerShell (Admin)) ]を選択して、新しいPowerShellウィンドウを開きます。

  1. 新しいPowerShellウィンドウで、cd “C:\Program Files\MySQL\MySQL Workbench 8.0\」と入力して正しいフォルダーに入り、このディレクトリをPC上の正しいインストールディレクトリに置き換えます。たとえば、MySQLのバージョンが8.0.1の場合は、代わりにMySQLWorkbench8.0.1フォルダーを使用します(MySQL Workbench 8.0.1)

  1. そこから、.\mysql.exe -u username -h X.X.X.X:XXXX -pと入力します。XXXX:XXXXをリモートサーバーのIPアドレスとポート番号(例:100.200.100.200(100.200.100.200:3306) :3306 )に置き換え、ユーザー名(username)をリモートアクセスを許可するMySQLユーザー名( (MySQL)rootなど)に置き換えます。画面上の追加の指示に従います。(Follow)
  2. サインインプロセスを完了し、MySQLデータベースにリモートでアクセスするために、プロンプトが表示されたらパスワードを入力します。

これが機能しない場合は、これらの手順と-h localhost引数を使用して、 SSHを使用して(または直接アクセスして)MySQLサーバーをホストしているサーバーまたはPCに接続します。次に、以下の手順に従って、適切なユーザーアカウントを作成できます。

MySQLデータベースへのリモートユーザーアクセスの許可(Allowing Remote User Access to a MySQL Database)

この時点で、サーバーのrootユーザーアカウントまたは昇格された特権を持つ別のユーザーアカウントを使用して、 MySQLサーバーにリモートで接続できるようになります。このレベルのアクセスは安全ではないため、MySQLデータベースにアクセスするためのより制限されたアカウントを作成することをお勧めします。

このアカウントはMySQL(MySQL)サーバーへのアクセスが制限され、選択したデータベースとのみ対話できるようになります。他のデータベースデータへのアクセス、新しいユーザーアカウントの作成など、より深刻な変更を加えることはできません。 

MySQLサーバーにリモートでサインインする機能が必要です。rootアカウントをリモートで使用できない場合は、リモートSSH接続を介して(SSH)mysqlコマンドを使用するか、サーバーをホストしているPCまたはサーバーに直接アクセスして、サーバーのシェルにアクセスする必要があります。

  1. ( mysqlツールを使用して)リモートMySQLシェルで、 CREATE USER “username”@”x.x.x.x” IDENTIFIED BY “password”; Enterを選択します。usernameを作成するユーザー名に、xxxxを接続元のIPアドレスに、passwordを適切なパスワードに置き換えます。

  1. 新しいアカウントに必要な権限を付与する必要があります。これを行うには、GRANT ALL ON databasename.* TO username@”x.x.x.x”; databasename、username、およびxxxx を正しい詳細に置き換えます。必要に応じて、 databasename(databasename)*に置き換えて、すべてのデータベースへのアクセスを許可します。 

アクセスが許可されたら、上記のセクションの手順を使用して、新しいアカウントを使用してサーバーにリモートで接続します(例:mysql -u username -h XXXX:XXXX -p)。

データベースデータの保護(Securing Your Database Data)

MySQLまたは別のタイプのSQLデータベースを使用しているかどうかにかかわらず、データのセキュリティを維持するために接続を安全に保つことが重要です。これを行う良い方法は、古い(そして簡単に推測できる)パスワードに頼るのではなく、サーバーへのリモートアクセス用のSSHキーを生成することです。(generate SSH keys for remote access)

データの損失が心配な場合は、データベースをオンラインで簡単にバックアップできます。(back up your database)ほとんどのデータベースはLinuxサーバーを使用して実行されます。Linuxファイルのバックアップを簡単に自動化できます(automate a Linux file backup easily)Windowsで(Windows)MySQLを実行している場合は、Windows用に同様の自動バックアップシステムを(automatic backup system for Windows)セットアップして、緊急時にデータを復元できるようにすることができます。



About the author

私はオーディオとユーザー アカウントの分野で長年働いてきた技術者です。Windows と Mac の両方のコンピューター、およびアップル製品の経験があります。また、2007 年からは Apple 製品の使い方についても教えています。主な専門分野は、ユーザー アカウントと家族の安全です。これに加えて、Windows 7 Home Premium、8.1 Pro、10 Pro、12.9 Mojave など、さまざまなソフトウェア プログラムの経験があります。



Related posts