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

推薦する

MySQL統計の概要

MySQL は、SQL 解析とクエリ最適化のプロセスを通じて SQL を実行します。パーサーは SQ...

CSS で平均レイアウトを実現するためにネガティブ マージン テクノロジーを使用する方法

通常、IE ブラウザでの CSS の互換性の問題を解決するために、フロート レイアウトが使用されます...

MySql 5.7.17 winx64 のインストールと設定に関する詳細なチュートリアル

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...

HTML は Double 11 クーポン取得を実装します (クーポン取得ページを開く時間を設定します)

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!DOCTYPE htm...

MySQL 5.7.13 のインストールと設定方法の Mac でのグラフィック チュートリアル

MySQL 5.7.13 Mac用インストールチュートリアル、非常に詳細で、以下のように記録されてい...

Ubuntu 18.04 は pyenv、pyenv-virtualenv、virtualenv、Numpy、SciPy、Pillow、Matplotlib をインストールします

1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...

高同時実行シナリオにおける nginx 最適化の詳細な説明

日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...

Nginx/Httpd ロードバランシング Tomcat 設定チュートリアル

前回のブログでは、Nginx と httpd を使用して、逆生成用のバックエンド Tomcat サー...

React は antd のアップロード コンポーネントを使用してファイル フォーム送信機能を実装します (完全なコード)

私はプロジェクトを実行するために react を使い始めたばかりで、非常に未熟で完全な初心者です。私...

Docker イメージのエクスポート、インポート、コピーの例の分析

最初の解決策は、イメージを公開イメージリポジトリにプッシュし、それをプルダウンすることです。 2 番...

Windows 8 での MySQL 5.6.15 のインストールと設定方法のグラフィック チュートリアル

MySQLは私がとても気に入っているデータベースです。今日はWindows 8システムでインストール...

Vue ルーティングフォールバックに最適なソリューション (vue-route-manager)

目次ルーティングマネージャー背景はじめる問題を解決する方法要約するルーティングマネージャー各ジャンプ...

ページのキャッシュを防ぐソリューション

解決: <head> に次のコードを追加します。コードをコピーコードは次のとおりです。 ...

CentOS7にJDK8をrpmモードでインストールする

CentOS 7が正常にインストールされると、OpenJDKのJREがデフォルトでインストールされて...

VMware vSphere6.0 サーバー仮想化の展開とインストールの図 (詳細な手順)

1. VMware vSphere 導入の早期計画のポイント1. vSphereの利点(わずかに)...