アカウントの総当りを特定する効率的な方法を探しています。ログ データベースに認証ログ エントリが含まれています。各エントリには次のものがあります。
- タイムスタンプ
- ユーザー名
- IPアドレス
- ログイン試行の結果 (成功 / 失敗)
どのログインが攻撃されたかを示すレポートを作成したいと考えています。攻撃とは、同じ IP アドレスから N 分 (たとえば 10) 以内に成功したログイン試行が続かず、失敗したログイン試行として定義されます。テストケースは次のとおりです。
- ユーザー/IP コンボが 2 回ログインに失敗し、3 回目に成功しました (攻撃なし)
- ユーザー/IP の組み合わせが 2 回ログインに失敗し、3 回目に成功しましたが、同じユーザーで別の IP がログインに失敗しました (2 番目のユーザー/IP の組み合わせに対する攻撃)。
O(n*log(N)) ソリューションを使用した 1 つのソリューションを想像できます。カーソルが各レコードを移動し、別のカーソルを使用して後のレコードを検索して、アクティビティを判断します。かなり非効率的です。
DB は問題ではありません。データは簡単に変換できるため、SQL、MySQL、nosql などです。