web-dev-qa-db-ja.com

特定のユーザーまたはIPからのmysqlロギングアクティビティ

Mysqlサーバーがあります。

サーバーには、私のアプリケーションと外部監査人(mysqlワークベンチを使用している人)がアクセスします。監査人には、特定のユーザーとパスワード、および専用IPがあり、特定の権限に対してのみ付与されます。

監査人からの活動を記録する必要があります。どういうわけかそれは可能ですか?できない場合、ネットワークからのパッケージをログに記録できますか?

8
darpet

一般的なログを使用できます。実際、一般的なログのMySQLテーブルバージョンを使用してみてください。

これを実行すると:

SHOW CREATE TABLE mysql.general_log\G

次のようなものが表示されます。

mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
       Table: general_log
Create Table: CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_Host` mediumtext NOT NULL,
  `thread_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.14 sec)

mysql>

user_Host列には、MySQLユーザーとコマンドの送信元のIPアドレス/ DNS名が記録されます。

「そのテーブルはCSVファイルです。解析する必要があります。」それは本当です、あなたはしなければならないでしょう。しかし、それをMyISAMテーブルに変換できることを知っていましたか?私は実際に雇用主のDBホスティングクライアントの1つについてこれを試し、それを説明する投稿を書きました(下のFeb 24, 2011の投稿を参照)。

基本的な手順は次のとおりです。

  1. Mysql.general_logテーブルをMyISAMにします。

    以下を実行します。

    CREATE TABLE mysql.general_log_original LIKE mysql.general_log;
    ALTER TABLE mysql.general_log ENGINE=MyISAM;
    ALTER TABLE mysql.general_log ADD INDEX (event_time);
    
  2. 一般ログを有効にする

    以下を/etc/my.cnfに追加します

    [mysqld]
    log-output=TABLE
    general-log
    

    一般ログのテキストバージョンも必要な場合は、次の行を追加します。

    [mysqld]
    log-output=TABLE,FILE
    general-log
    general-log-file=/var/log/mysql_general.log
    
  3. Mysqlを再起動します

    単にservice mysql restartを実行します

MyISAMテーブルとしての一般的なログと遅いログの使用に関する多くの投稿があります。

警告

MySQL 5.5.28は最近 監査ログプラグインとそのインストール方法 を導入しました。

ここにオプションがあります

これらは私にとっては初めてのことなので、監査ログプラグインには現時点で賛否両論はありません。

9
RolandoMySQLDBA