web-dev-qa-db-ja.com

Mysqlリモート接続ロギング

最新の安定したCentOSで実行されているmysqlサーバーへのリモート接続を許可する必要があります。

私はこのアイデアがまったく好きではないので、少なくともできるだけ多くの関連情報を収集したいと思います。正確には、次のことが必要です(欲しい):

  • [日時] 1.2.3.4接続
  • [日時] 3.4.5.6間違ったパスワード

mysqlマニュアル によると、すべてをログに記録するか(許容できないパフォーマンスのオーバーヘッド)、私に関係があると思われるものは何もありません(そして、攻撃者/無責任な管理者を追跡するのに役立つもの)。

このログをN分ごとにgrepして消去することを考えましたが、これは正しくないようです。

3
Vyktor

実際には、すべての接続をmysql自体に記録する方法があります。

前提条件:この情報を格納するために使用するデータベースの名前は、adminと呼ばれます。

  1. 接続情報を格納するテーブルを作成します。必要がない場合は、一意のキーを含める必要はありません。

    CREATE TABLE admin.connections (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, connect_time DATETIME NOT NULL, user_Host VARCHAR(50) NOT NULL, connection_id INT UNSIGNED NOT NULL, UNIQUE INDEX idx_connect_time_user_Host (connect_time, user_Host));

  2. Init-connect変数を設定します。これは、接続するクライアントごとに実行される文字列です。詳細はこちら。

    SET GLOBAL init_connect = "INSERT INTO admin.connections (connect_time, user_Host, connection_id) VALUES (NOW(), CURRENT_USER(), CONNECTION_ID());";

  3. すべてのユーザーの権限をチェックして、ユーザーがadmin.connectionsテーブルにレコードを挿入できることを確認します。

  4. グローバル権限のないユーザーとしてログインし、admin.connectionsテーブルに行を挿入する必要があります。 init-connectシステム変数は、グローバル権限を持つユーザーでは機能しないことに注意してください。良くも悪くも、私たちすべてのDBAはそれが何を意味するのかを知っています。

  5. 接続テーブルが成長し、繁栄するのを見てください。新しいペット(プロジェクト)を始めたところです。

ソース: http://mysqlhints.blogspot.com.es/2011/01/how-to-log-user-connections-in-mysql.html

今、あなたはあなたのユーザーが責任があることを期待しなければなりません、彼らはあなたのテーブルをデータで溢れさせるかもしれません、しかしそれからあなたは悪意のある誰かに対処します。安全のために、このテーブルを監視し、そのコピーを保持するリモートロケーションを使用します。

3
Lucas Kauffman