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 サイトの互換性と最適化に必要)

推薦する

Tomcat プロジェクトを展開する一般的な方法のいくつか [テスト済み]

1 / Webプロジェクトファイルをwebappsディレクトリに直接コピーするこれは最も一般的に使...

MySQL 入門 - 概念

1. それは何ですか? MySQL は最も人気のあるリレーショナル データベース管理システムです。W...

Nginx の場所と proxy_pass パスの設定の問題の概要

目次1. Nginxロケーションの基本設定1.1 Nginx 設定ファイル1.2 Pythonスクリ...

LinuxテキストエディタVimの詳しい説明

Vim は強力なフルスクリーン テキスト エディターであり、Linux/UNIX で最も一般的に使用...

vue-routerフック関数はルーティングガードを実装します

目次概要グローバルフック関数ルーティング固有のフック関数コンポーネント内のフック関数概要ルートガード...

Dockerカスタムネットワークコンテナ相互接続

目次序文-リンクカスタムネットワーク質問する序文前回は、 -Linkパラメータを使用してコンテナ間の...

HTML マーキー文字フラグメントのスクロール

その特性は次のとおりです。方向アクティブな字幕のスクロール方向を設定するコードは次のとおりです。 &...

Dockerfile を使用して Docker イメージをカスタマイズする方法

Dockerfile を使用したイメージのカスタマイズイメージのカスタマイズとは、実際には各レイヤー...

Alibaba Cloud Centos7のインストールとSVNの設定

1. SVNサーバーをインストールする yum でサブバージョンをインストール2. SVNバージョン...

MySQL DMLステートメントの使用に関する詳細な説明

序文:前回の記事では、注意深い学生であれば発見できたかもしれない DDL ステートメントの使用法を中...

count(1)、count(*)、count(列名)の実行の違いの詳細な説明

実施効果: 1. count(1) と count(*)テーブル内のデータ量が多い場合、テーブルを分...

地域のカスタムカラーのためのechars 3Dマップソリューション

目次質問伸ばす問題を解決する要約する質問プロジェクトの要件に従って、以下の州地図で個々の都市を(異な...

MySQLクエリ条件のnot inとinの違いと理由

まずSQLを書く SELECT DISTINCT from_id タラから cod.from_id ...

VUE と Canvas を使用して Thunder Fighter タイピング ゲームを実装する方法

今日は、サンダーファイタータイピングゲームを実装します。ゲームプレイは非常に簡単です。それぞれの「敵...

MySQL における int の最大値の詳細な説明

導入2日前に見た問題について詳細に書きます。バイトコンピューターがバイナリに基づいていることは誰もが...