sql >> データベース >  >> RDS >> Mysql

データベースセキュリティ101:オープンソースデータベースのセキュリティ

    データのセキュリティは、データベース管理の最も重要な側面の1つです。組織構造によっては、本番データベースを管理している場合は、不正アクセスと使用状況を監視する必要があります。これは、基盤となるホストにも当てはまります。このブログでは、オープンソースデータベースのセキュリティについて説明します。

    一般的なセキュリティ

    データベースソフトウェアをインストールした後、最も一般的なセキュリティミスを回避するために、いくつかの事前チェックを行う必要があります。

    一般的なガイドラインは次のとおりです。

    • 誰にもroot/管理者アクセスを許可しないでください!これは重要です。

    • データベースアクセス特権システムがどのように機能するかを学びます。必要以上の特権を付与しないでください。すべてのホストに特権を付与しないでください。

    • データベースにクリアテキストのパスワードを保存しないでください。 SHA2()またはその他の一方向ハッシュ関数を使用して、ハッシュ値を格納する代わりに。

    • デフォルトのポートを使用しないでください。また、信頼できないホストから選択したポートにアクセスできないようにしてください。

    • オープンソースデータベースをファイアウォールの背後に配置します。これにより、あらゆるソフトウェアのあらゆる種類のエクスプロイトの少なくとも50%からユーザーを保護します。

    アクセス制御とアカウント管理

    データベースの主な機能の1つは、特定のホストから接続するユーザーを認証し、そのユーザーをデータベースの特権に関連付けることです。接続できるユーザーを制御するために、各アカウントにパスワードなどの認証資格情報を割り当てることができます。

    ユーザーの役割

    データベースの役割は、1人以上のユーザーに割り当てることができる任意の数の特権のコレクションです。最新のオープンソースデータベースでは、大多数のユーザーが事前定義された役割を持っています。

    パスワード管理

    データベースにアクセスするには、ユーザーがユーザー名とパスワードで自分自身を認証する必要があります。データベースは、ユーザーが入力したパスワードに同じハッシュ関数を適用し、データベースに保存されているハッシュと比較します。両方が一致する場合、許可が付与されます。すべてのデータベースユーザーが定期的にパスワードを変更するには、パスワードの有効期限が必要です。また、明示的な管理者指定のリテラルパスワードには、ランダムパスワードの生成が必要です。監視する重要なことの1つは、間違ったパスワード/認証の失敗の追跡です。間違ったパスワードのログインに何度も失敗した後は、一時的なアカウントのロックを有効にすることをお勧めします。

    期限切れのパスワードの処理

    パスワードの有効期限が切れると、データベースサーバーは期限切れのパスワードクライアント接続を切断します。

    [[email protected] vagrant]# mysql -u severalnies -p
    Password: ******
    ERROR 1862 (HY000): Your password has expired. To log in you must
    change it using a client that supports expired passwords.

    リソースの制限

    任意のユーザーアカウントで同時に実行できる接続の数を制限することにより、クライアントによるデータベースサーバーリソースの使用を制限します。たとえば、ユーザーが1時間あたりに実行できるクエリの数や、ユーザーが1時間あたりにサーバーに接続できる回数を制限できます。

    暗号化された接続

    データベースは通常、いくつかのセキュリティプロトコルを使用したクライアントとサーバー間の暗号化された接続をサポートします。 SSLを使用して、クライアントとサーバー間の接続を暗号化します。これにより、データがネットワークレイヤー上で読み取り不可能な形式に変換され、ネットワークの盗聴が回避されます。データベースでSSLを有効にすると、暗号化された接続のサポートが開始され、暗号化されていない接続は許可されなくなります。

    セキュリティコンポーネントとプラグイン セキュリティコンポーネントはデータベースと簡単に統合できます。たとえば、mysqlには、セキュリティ機能を実装するいくつかのコンポーネントとプラグインが含まれています。

    認証プラグイン-これらのプラグインは、クライアントがMySQLサーバーに接続しようとする試みを認証します。データベースサーバーと簡単に統合できます。

    パスワードプラグイン-このプラグインは、現在のパスワードが強いかどうかをチェックし、弱いと見なされるパスワードを拒否します。

    キーリングプラグイン-このプラグインはテーブルスペースを暗号化します。この暗号化技術は、キーファイルのローテーションに基づいて機能します。 MySQL8.0を暗号化する方法の例を次に示します。

    監査ログ-監査は、データベースサーバーで発生しているアクティビティを監視および記録するプロセスです。誰が何をしているのかを記録するために使用されます。ユーザーによるデータベース操作、接続、またはログイン試行の失敗。ロードバランサーを使用してデータベースにアクセスしている場合は、それも監視する必要があります。デフォルトでは、監査ログファイルはmysqlデータディレクトリに保存されます。

    サンプルログ
    20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
    20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
    20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0

    監査ログファイルを別の場所に保存する場合は、このパラメーターを構成ファイル「server_audit_file_path」に追加できます。

    ログの監視-ログの監視により、運用チームは、データベースインスタンスだけでなく、ロードバランサーで構成されるデータベース環境に対するより高いレベルの可視性を得ることができます。異常が発生したとき、およびそれらが発生した頻度を特定するのに役立ちます。

    パスワード検証プラグイン

    パスワードは、単語、数字、文字列のようなものです。データベースとサーバー側では、特定のアクセスにユーザー名とパスワードが必要でした。たとえば、パスワードがクリアテキスト値として提供されている場合、validate_passwordプラグインはパスワードを現在のパスワードポリシーと照合し、パスワードが弱い場合は拒否します。

    validate_password_policyには、LOW、MEDIUM、またはSTRONGの3つの値があります。 LOWの値はパスワードの長さのみをチェックし、MEDIUMポリシーはいくつかの条件を追加し、STRONGポリシーは、4文字以上で構成されるパスワードサブストリングがvalidate_password_dictionary_file変数を変更することで指定できる辞書ファイル内の単語と一致してはならないという条件を追加します。

    LDAPプラグイン

    LDAPプラグインを使用すると、データベースサーバーはLDAPディレクトリで定義されたユーザーからの接続を受け入れることができます。 LDAP認証では、クライアント側とサーバー側のプラグインがパスワードをクリアテキストとして伝達します。パスワードの漏洩を防ぐために、クライアントとサーバー間の安全な接続をお勧めします。クライアントのユーザー名とホスト名が一致しなかった場合、データベースは接続を拒否します。

    LDAP構成は、ClusterControlでは非常に簡単です。この投稿では、ClusterControlを使用した構成手順について説明しました。

    データベースバックアップの保護

    データの保護に関しては、データのバックアップが重要です。バックアップを安全に保ち、より迅速に復旧できるようにすることがさらに重要です。 ClusterControlは、バックアップファイルをオフサイトに出荷する前にAES-256暗号化アルゴリズムを使用して暗号化するなど、バックアップ管理プロセスを包括的にサポートします。

    ジャンプホストネットワークへのVPNアクセス

    ローカルからプライベートネットワークのオープンソースデータベースにアクセスするには、VPNを使用するのが最善の方法です。 VPNは、パブリックネットワークを介してプライベートネットワーク接続を構築するためのプライバシーとセキュリティをユーザーに提供します。ジャンプホストは、リモートネットワークサーバーにアクセスするための中間ホストまたはSSHゲートウェイです。ジャンプサーバーは、両端を接続する仲介者として機能するため、反対側にアクセスするための「ジャンプ」ホストになります。これは、サーバーを外部から保護するための一般的な方法の1つです。 SSHトンネリングを使用して、VPNサーバーを構成するよりも少ない労力で、安全な方法でリモートネットワークにアクセスできます。

    ジャンプホストを介したデータベースアクセス管理

    本番データベースサーバーにアクセスしてより安全にするには、専用のジャンプサーバーが必要です。この専用ジャンプサーバーは、インターネットなどの外部ネットワークまたはパブリックネットワークからプライベートネットワークへのアクセスを提供します。これは、すべてのユーザーがプライベートネットワークに到達するための段階的なアプローチを提供し、潜在的なサーバー攻撃の可能性を最小限に抑えます。

    これをどのように達成できますか?

    ベストプラクティスは、DBインスタンスがプライベートネットワーク上にある場合でも、Linuxマシンからデータベースに接続するようにジャンプサーバーを設定することです。ジャンプホストを作成したら、以下のガイドラインに従ってください。

    • プライベートサブネットを使用してデータベースでパブリックアクセスを制限します。

    • ルートテーブルのインターネットゲートウェイを制限します。

    • 新しいVPCを作成するか、ジャンプホストをデータベースインスタンスと同じVPCに追加します。次に、パブリックサブネットを使用してジャンプサーバーにインターネットゲートウェイを追加します。

    • 必要なIPへの特定のデータベースポートのみを許可します。

    次に、SSHトンネリングを作成して、データベースサーバーに安全な方法でアクセスできます。

    SELinux

    SELinuxは、カーネルの変更とユーザースペースツールのセットであり、いくつかのポリシーモジュールがあります。ポリシーモジュールは、プロセス、ファイル、ポート、およびその他のシステムオブジェクトが相互に作用する方法のルールを定義するSELinuxコンテキストです。システムオブジェクト間の相互作用は、ポリシールールで許可されている場合にのみ許可されます。

    システムユーザーはSELinuxにほとんど気づいていません。システム管理者だけが、サーバー環境に実装するポリシーがどれほど厳格であるかを考慮する必要があります。この詳細により、SELinuxカーネルはシステム全体を完全かつきめ細かく制御できます。


    1. MySQLで複数の列を検索する方法は?

    2. データベース行タプルの整数に「L」サフィックスが付いているのはなぜですか?

    3. RMANバックアップコマンド

    4. SQLServerのファイル名とバージョン