web-dev-qa-db-ja.com

ウェブホストを使用して、MySQLデータベースにリモート接続できるIPアドレスを明示的に追加するのはなぜですか?

MySQLデータベースに接続するには、通常、次のコマンドを使用します。

mysql -h Host_address database_name -u db_user -p

ここで、db_userは問題のデータベースに関連付けられています。ただし、Justhost、Hostgator、iPageなどの商用Webホストとの共有Webホスティングプランがある場合、Webホストは、ホスティングサーバーからデータベースにアクセスしない限り、この方法でデータベースにアクセスすることをブロックします(その場合はHost_addresslocalhostになります。これを回避するには、データベースにリモートでアクセスできるようにするIPアドレスを明示的にホワイトリストに登録する必要があります。

私の質問は、なぜですか?指定されたユーザーアカウント(上記の例のdb_userなど)に制限されたデータベースへのアクセスは十分に安全ではありませんか?

2
Tyler

データベースサーバーが普遍的に世界に開かれていない理由は、2つの主な項目に要約できます。安定性とセキュリティ

  • 安定性:基本的に、リモート接続を介してWebサイトのデータベース操作を行うことはほとんどありません。また、ほとんどのデータベースサーバーは、予想されるトラフィックを処理するように調整および調整されています。予期しないトラフィックではありません。したがって、特定のIPアドレスの特定のユーザーへのアクセスを制限することにより、ホスティングサービスは、ランダムなブルートフォースアクセス攻撃によるオーバーヘッドと頭痛に対処する必要がなくなります。

  • セキュリティ:安定性に関連するのはセキュリティです。ウェブサイトを運営したことがあるなら、弱点を探しているロボットやスパイダーによってウェブサーバーが絶えず調査されていることに気付くでしょう。 Webサーバーは、これらのプローブ試行を非常にうまく処理できます。データベースサーバー。データベースサーバーのコア機能は、DDoS攻撃と戦うのではなく、データを提供することです。そして、私が信じてください。データベースサーバーを世界に開放する場合、データベースサーバーはリソースを大量に消費するため、簡単にDDoSを忘却の対象にしたいと考えています。

問題は、データベースサーバーをトラフィック用に最適化できることです。実際の安定性を微調整するには、忍耐力が必要です。そして、それは安全に分離/制御されたシステム上にあります。データベースサーバーが世界に開かれた場合に発生する混chaosを想像できますか?

これが、大多数のWebサイトがlocalhost接続を介してデータベースに接続する理由です。また、Twitter、Flickr、TumblrなどのサービスがRESTful APIを使用してデータにアクセスする理由:これらのAPIは、データベースを直接アクセスから保護するWebサーバーレイヤーを提供します。背後のデータベースが問題なく仕事をしている間に、ハッキングの試みの打撃をWebサーバーが処理できるようにすることで、その混乱に対処しなければならないという頭痛から解放されます。

1
JakeGould

あなたのウェブサイトのようにMySQLサーバーが一般公開されている場合、ブルートフォース攻撃や、ほとんど対処する必要のないボットによるその他のリモート攻撃にさらされます。リモートMySQLアクセスが必要になることを十分に知っているほとんどの人は、cPanelなどでの設定に精通している必要があります。これは、あなたにとってセキュリティの問題であり、ホスティング会社にとってはストレスが少ないです。

3
Anagio

実際には、他の理由ではなく、データベースサーバーセキュリティの設計方法に戻ります。データベースサーバーでは、localhostを使用する以外で明示的なユーザー名/ホストアクセスを設定する必要があります。これは、今日知っているようにウェブよりも長く存在しており、ほとんどのユーザーが端末を使用して直接ログオンしたビッグアイロンの時代への先祖返りです。ネットワーク経由のアクセスはすべて明示的に定義されました。一部のWebホスティングシナリオでは、Webベースのアプリケーションを使用してこれを回避します。ただし、リモートの場所からクライアントツールを介してアクセスするには、データベースにユーザー/ホストアクセスを常に定義する必要があります。 Webホストには、実際には選択の余地がありません。

1
closetnoc

与えられた答えはOSセキュリティのために非常に有効ですが、考慮しなければならない別の側面があります:MySQL許可。

Webホスティング会社がデータベースを提供する場合、同じMySQLインスタンス内のテナントでもある他のデータベースへのアクセスを許可したくありません。

たとえば、データベースdbtylerが与えられている場合、ユーザーをdbtylerデータベースに制限する必要があります。あなたはそれを次のように行います

GRANT USAGE ON *.* TO user_tyler@'10.20.30.40' IDENTIFIED BY 'somepassword';

これにより、user_tyler10.20.30.40からmysqldに接続できます。

dbtylerデータベースへのアクセスはどうですか?次に、この助成金を発行します

GRANT ALL PRIVILEGES ON dbtyler.* TO user_tyler@'10.20.30.40';

ウェブホスティング会社がuser_tylerへのリモートアクセスを許可したとしても、

GRANT ALL PRIVILEGES ON dbtyler.* TO user_tyler@'%';

これにより、dbtylerデータベースが他のテナントからアクセスされないように保護されます。同様に、これはuser_tyler@'10.20.30.40'がテナントデータベースにアクセスするのを防ぎます。

詳細については、MySQLユーザー認証の処理方法について、DBA StackExchange Post ユーザー作成用GRANTステートメントについて を参照してください。

1
RolandoMySQLDBA