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

推薦する

Day.js をベースにした JavaScript での日付処理のよりエレガントな方法

目次day.js を使用する理由モーメントデイ.js day.js がなければどうなるでしょうか? ...

Vueライフサイクルの詳細な説明

目次ライフサイクルを理解する理由ライフサイクルとはライフサイクルフック関数作成され、マウントされたフ...

MySQL ソートの原則とケース分析

序文ソートはデータベースの基本的な機能であり、MySQL も例外ではありません。ユーザーは、Orde...

MySQLスタートアップが起こした事故の実録

目次背景MySQLが完全に起動したかどうかを確認する方法事故最初の変更2回目の改訂要約するMySQL...

クラウド サーバー Ubuntu_Server_16.04.1 に MySQL をインストールしてリモート接続を有効にする方法

1. MySQLをインストールします。対応するソフトウェアをインストールするには、次の 3 つのコマ...

LNMP と phpMyAdmin を Docker にデプロイする方法

環境準備:複数のコンテナに基づいてホストに lnmp をデプロイします。 nginx サービス: 1...

MySQLクエリ条件の一般的な使用法の詳細な説明

この記事では、例を使用して、MySQL クエリ条件の一般的な使用方法を説明します。ご参考までに、詳細...

Reactにおける不変値の説明

目次不変の値とは何ですか?不変の値を使用するのはなぜですか? Reactのパフォーマンス最適化は不変...

Spring Cloud での Docker デプロイメントに jib を使用する詳細な手順

ジブの紹介Jib は Google が開発した、Java アプリケーションの Docker および ...

Docker で nginx のログレベルを調整する方法

目次はじめにNginx Dockerファイル新しい会議もっと参考文献はじめに最近、アプリケーションの...

Linux Crontab シェル スクリプトを使用して第 2 レベルのスケジュールされたタスクを実装する方法

1. シェルスクリプトcrontab.shを書く #!/bin/bash step=1 #ステップ間...

スネークゲームを作るための Pygame コード

目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...

Vue での mixin の応用について議論する

Mixin は、再利用可能な機能を Vue コンポーネント間で分散する非常に柔軟な方法を提供します。...

IISとAPACHEはHTTPSへのHTTPリダイレクトを実装しています

7 のMicrosoft の公式 Web サイトから HTTP Rewrite モジュールをダウンロ...

クラウド決済を実装するWeChatミニプログラムについて

目次1. はじめに2. 思考分析3. クラウド決済のケーススタディ1. クラウド機能1-1. 認証不...