MySQL 接続制御プラグインの紹介

MySQL 接続制御プラグインの紹介

1. 接続制御プラグイン(connection_control)の紹介

MySQLサーバーには、さまざまなプラグインをカスタマイズしてインストールできるプラグイン ライブラリが含まれています。 connection_controlプラグインはその 1 つで、主に、一定数の連続ログイン操作が失敗した後のクライアントの応答の遅延を制御するために使用されます。このプラグインは、クライアントからのブルートフォースログインのリスクを効果的に防ぐことができます。プラグインは次の 2 つのコンポーネントで構成されています。

  • CONNECTION_CONTROL : ログイン失敗回数と遅延応答時間を制御するために使用されます。
  • CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS : 失敗したログイン試行をinformation_schemaシステム データベースに記録します。

接続制御プラグイン ファイルの基本名はconnection_controlです。ファイル名のサフィックスはプラットフォームごとに異なります ( UnixおよびUnix系システムの場合は .so、 Windowsの場合は.dll )。以下では、 connection_controlプラグインをインストールする例としてLinuxシステムを取り上げます。Windows システムWindows 、.so を .dll に変更するだけです。

1.1 connection_controlプラグインを動的にインストールする

mysql> プラグイン CONNECTION_CONTROL SONAME 'connection_control.so' をインストールします。
クエリは正常、影響を受けた行は 0 行 (0.04 秒)

mysql> プラグイン CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so' をインストールします。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

1.2 プラグインのステータスを確認する

mysql> 選択
    -> プラグイン名、プラグインステータス 
    -> から
    -> INFORMATION_SCHEMA.PLUGINS 
    -> どこ
    -> PLUGIN_NAME LIKE 'connection%';
+------------------------------------------+---------------+
| プラグイン名 | プラグインステータス |
+------------------------------------------+--------------+
| CONNECTION_CONTROL | アクティブ |
| CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | アクティブ |
+------------------------------------------+---------------+

1.3 インストールが完了すると、関連するシステム変数が表示されます。

mysql> 'connection_control%' のような変数を表示します。
+-------------------------------------------------+------------+
| 変数名 | 値 |
+-------------------------------------------------+------------+
| 接続制御失敗接続しきい値 | 3 |
| 接続制御最大接続遅延 | 2147483647 |
| 接続制御の最小接続遅延 | 1000 |
+-------------------------------------------------+------------+


プラグインのインストールは非常に簡単であることがわかりますが、このプラグインには具体的にどのような機能がありますか?まず、関連するシステム変数について説明しましょう。

  • connection_control_failed_connections_threshold : アカウントに許可される連続失敗試行回数。デフォルト値は 3 で、これは 3 回の接続失敗後に接続制御が有効になることを意味し、0 は有効ではないことを意味します。
  • connection_control_max_connection_delay : しきい値を超える接続失敗の最大遅延 (ミリ秒単位)。デフォルトは 2147483647 ミリ秒、約 25 日です。
  • connection_control_min_connection_delay : しきい値を超える接続失敗の最小遅延 (ミリ秒単位)。デフォルトは 1000 ミリ秒、つまり 1 秒です。

この時点で、 connection_controlプラグインの役割が理解できたと思います。これは、クライアントがデータベースへの接続に一定回数連続して失敗すると、サーバーが一定時間応答を遅延させるというものです。連続して失敗する回数が多いほど、応答の遅延時間は長くなります。

2. 接続制御実験

具体的な実験をしてみましょう。実験効果を上げるために、失敗しきい値を 10 に設定し、最小遅延時間を 1 分に設定しました。つまり、10 回連続して接続に失敗した場合、最小遅延応答時間は 1 分です。わざと間違ったパスワードを入力して試してみましょう。

2.1 初期状態

mysql> 'connection_control%' のような変数を表示します。
+-------------------------------------------------+------------+
| 変数名 | 値 |
+-------------------------------------------------+------------+
| 接続制御失敗接続しきい値 | 10 |
| 接続制御最大接続遅延 | 2147483647 |
| 接続制御の最小接続遅延 | 60000 |
+-------------------------------------------------+------------+
セット内の 3 行 (0.01 秒)

mysql> information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS から * を選択します。
空のセット (0.00 秒)

2.2 故意に間違ったパスワードを入力する

[root@localhost ~]# mysql -utestuser -p123
mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。
エラー 1045 (28000): ユーザー 'testuser'@'localhost' のアクセスが拒否されました (パスワード使用: YES)

2.3 失敗記録の表示

mysql> information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS から * を選択します。
+----------------+-----------------+
| ユーザーホスト | 失敗した試行 |
+----------------+-----------------+
| 'テストユーザー'@'%' | 1 |
+----------------+-----------------+
セット内の 1 行 (0.00 秒)

# 連続失敗回数がしきい値を超えると、再接続時に遅延が発生します。つまり、パスワードが正しいかどうかが返されるまでに一定の時間がかかります。mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
+----------------+-----------------+
| ユーザーホスト | 失敗した試行 |
+----------------+-----------------+
| 'テストユーザー'@'%' | 10 |
+----------------+-----------------+
mysql> プロセスリストを表示します。
+---------+----------+--------------------+--------------------+--------+--------------------------------------+------------------+
| ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 |
+---------+----------+--------------------+--------------------+--------+--------------------------------------+------------------+
| 1817003 | root | localhost | NULL | クエリ | 0 | 開始 | プロセスリストを表示 |
| 1817091 | testuser | localhost | NULL | 接続 | 16 | connection_control プラグインで待機中 | NULL |
+---------+----------+--------------------+--------------------+--------+--------------------------------------+------------------+

通常の状況では、間違ったパスワードを入力すると、すぐにエラーメッセージが返されます。連続した失敗回数がしきい値に達すると、次の接続試行が遅延されます。具体的な症状としては、スタックしてしまい、遅延が終わるまでエラーメッセージが返されないというものです。 information_schemaシステム ライブラリのテーブルには、失敗したログインのユーザー名と失敗時間が記録されます。遅延が発生すると、遅延した接続もprocesslistで確認できます。パスワードが正しく入力されると、遅延はキャンセルされ、カウントが再開されます。

したがって、このプラグインがクライアント側のブルートフォースクラッキングを防止できる理由を理解する必要があります。ブルートフォースクラッキングが1分間に120回試行されると仮定すると、このプラグインを有効にした後、一定回数連続して失敗すると応答が遅延され、失敗回数が増えるにつれて遅延時間が増加します。直前に次のクラッキングを開始できますが、遅延時間後にのみ次の試行を開始できるため、ブルートフォースクラッキングのリスクを大幅に削減できます。

ただし、接続制御プラグインを有効にした後は、遅延接続の有無に注意する必要があります。遅延接続も接続数を占有し、接続バックログが発生して接続不足につながる可能性があるためです。したがって、接続の遅延が発生した場合は、接続先をすぐに確認し、パスワードが正しく入力されていることを確認する必要があります。

このプラグインを有効にするには、適切なしきい値と遅延時間を必ず設定し、これらのパラメータを設定ファイルに書き込むようにしてください。通常、セキュリティ評価ではこの要件が発生する可能性があり、このとき接続制御プラグインが役立ちます。

MySQL接続制御プラグインに関するこの記事はこれで終わりです。MySQL 接続制御プラグインに関するより関連性の高いコンテンツについては、 MySQLの過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaSwing+MySQL に基づく学生クラブ管理システムの設計と実装
  • MySQL ディープページング問題の解決の実践記録
  • MySQL のクエリパフォーマンスに対する制限の影響
  • JavaSwing をベースに設計・実装されたホテル管理システム
  • JavaSwing 戦車バトルゲームの設計と実装
  • JavaSwingの基本を詳しく解説レイアウトに関する知識
  • JavaSwing バックグラウンドミュージック mp3
  • Mysql+JavaSwing に基づくスーパーマーケット商品管理システムの設計と実装

<<:  Javascript 仮想 DOM の詳細な説明

>>:  よく使用される HTML メタタグ属性 (Web サイトの互換性と最適化に必要)

推薦する

Ubuntu での MySQL へのリモート ログインのインストールと設定に関するチュートリアル

この記事では、MySQLのインストールと設定のリモートログインチュートリアルを参考までに紹介します。...

LinuxでDHCPサーバーを構築する方法

目次1. 基礎知識: 2. DHCPサーバーの設定: 1. サーバーのIPを確認する2. DHCP ...

MySQL EXPLAIN出力列の詳細な説明

1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...

JavaScript コードベースをよりクリーンにする 5 つの方法

目次1. 短絡や条件文の代わりにデフォルトのパラメータを使用する2. 複数の条件の処理3. スイッチ...

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

子要素の margin-top によって親要素が移動する問題の解決方法

問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...

フロントエンドとバックエンドを分離した nginx 構成を展開するための完全な手順

序文決まり文句です。ここでは、フロントエンドとバックエンドの分離についての私の理解についてお話ししま...

MySql 8.0.11 のインストール プロセスと Navicat とのリンク時に発生する問題の概要

私のシステムとソフトウェアのバージョンは次のとおりです。システム環境: win7、64ビットMySQ...

Reactのコンポーネント共同利用実装

目次ネスティング親子コンポーネント通信ブラザーコンポーネント通信撤回するReact の Linked...

ショートビデオ(Douyin)の透かし除去ツールの実装コード

目次1. まず最初のリンクを取得する2. ブラウザでこのリンクを開いてください3. アドレスを開くと...

js の hasOwnProperty のプロパティとインスタンスの使用法の詳細な説明

1. js は hasOwnProperty が不正に占有されることから保護しません。オブジェクトに...

ウェブサイトにファビコンを追加するためのヒント: URLの前の小さなアイコン

いわゆるファビコンは、Favorites Icon の略で、中国語ではウェブサイトアバターと呼ばれて...

Dockerでk8sをデプロイする方法

K8s k8s はクラスターです。クラスターには複数の名前空間があります。名前空間の下には複数のポッ...

MySQL デュアルマシン ホットスタンバイ実装ソリューション [テスト可能]

目次1. コンセプト2. 環境の説明3. マスタースレーブホットスタンバイ実装1. コンセプト1. ...