MySQLのログイン試行を記録する


25

MySQL本番サーバーでログインに失敗することが時々あります(MySQLダッシュボードがアラートを出します)。有効にせずに、MySQLサーバーへのログインと成功を1つずつ記録する方法はありますgeneral_logか?

general_log高負荷の運用サーバーであるため、オプションではないと思います。



mysqlの関係者によると:As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. エンタープライズ版のみが持っています。
ティナ

回答:


20

好奇心が強い人に知らせるために:エラーログを掘り当ててください!

(1)。my.cnfの編集(ここにある設定ドキュメント)

[mysqld]

:#エラーログファイルの名前を入力します。それ以外の場合は、デフォルト名が使用されます。

log_error = / var / log / mysql / error

:#defaults to1。値が1を超える場合、接続の中断と新しい接続試行のアクセス拒否エラーがエラーログに書き込まれます

log_warnings = 2

...

(2)。コマンド実行時

$ sudo cat /var/log/mysql/error.err | egrep '[aA] ccess denied'

(3)。あなたはそれを持っています!

(4)。ユーザーを制限する必要がある場合(マルチユーザーデータベースで攻撃またはmysqlユーザーパスワードの回復を試みる)、(http://dev.mysql.com/doc/refman/5.5/en/user-resources.html

mysql> GRANT USAGE ON *。* MAX_CONNECTIONS_PER_HOUR 100で 'attacker' @ 'localhost'に;

1時間あたり100回のパスワード回復試行のみに制限します。


2

一般的なログは、ログイン試行(成功と失敗)をすべてログに記録する可能性があると思います。主な問題は、一般的なログがデータベースのパフォーマンスに影響することです。クエリで一般ログを有効にできます

SET GLOBAL general_log = 'on'

MySQLの新しいバージョン用。


これは一時的または永続的ですか?それが一時的である場合/etc/mysql/my.cnf、mysqlの変更が必要ですか?
DarckBlezzer

一時的なものです。このアプローチは機能しますが、--general-logMySQLの起動時にフラグに追加することもできます。
rmc00

1

こんにちは、それは可能だとは思いません。

mysql 5.1.29の時点では、ストレージオプション(テーブルまたはファイル)と場所、および必要なログ(エラー、一般、バイナリ、またはスロークエリ)を指定できます。私の知る限り-ログの形式やログに記録する内容を指定することはできません。私は間違っているかもしれませんが、すべてのログイン試行はエラーログではなく一般ログに記録されると思います。

ただし、mysqlサーバーがアプリケーションサーバーとは別のマシンで実行されており、ポート3306(または何でも)を開く必要があり、sshトンネルを使用できない場合、mysqlサーバーには誰もアクセスできません。ニリー。Webトラフィックに公開しないことを強くお勧めします(ファイアウォールの背後にない場所にある場合のように)アプリケーションサーバーのIPアドレスまたはIPブロックと管理アクセスIP(現在の場所)アクセス元)

それが役に立てば幸いです。


1

mysql-audit-pluginを使用してconnect、ログとquitコマンドを実行できます。

  1. mysql-audit-plugin releaseから適切なバージョンを見つけ、mysql 5.7を使用しaudit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zipたため、を使用しました。
  2. ダウンロードしたsoファイルをで指定された場所に再配置しますmysqladmin variables | grep plugin_dir
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. ログ機能をオンにするとmysql>set global audit_json_file=ON、デフォルトで、成功したすべての操作が記録されます。設定することで、set global audit_record_cmds='quit,connect'それをによると、のみ接続し、私が思うに終了しますログインするのmysql-監査プラグインの設定

これは、ログインおよびログアウトのためにファイルでどのように見えるかです:

{"msg-type":"activity","date":"1543740612328","thread-id":"1015112","query-id":"3045222","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11575","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Quit","query":"Quit"} 

{"msg-type":"activity","date":"1543740724627","thread-id":"1015113","query-id":"0","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Connect","query":"Connect"}
{"msg-type":"activity","date":"1543740724629","thread-id":"1015113","query-id":"3045223","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"rows":"1","status":"0","cmd":"select","query":"select @@version_comment limit 1"}

0

対象のサーバーに外部接続が設定されていない場合、ユーザー/パスが設定される前に新しいアプリケーションからロールアウトされない場合を除き、アプリサーバーに対する何らかの攻撃を心配します。

サーバーが何らかの理由で3306の外部接続にさらされている場合は、意図的で必要な場合を除き、Nickが述べたように構成を設定し、iptablesを使用してアプリサーバーのみから3306へのトラフィックを制限することも検討します。


MySQLは、mysql.userに少なくとも1つの一致する行がないIPアドレスからの接続を自動的に拒否します
デビッドM

0

http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/、著者に、tcpdumpを使用してパケットをキャプチャする方法を示す、文字列に基づいて出力をフィルタリングします。

これは、general_logとパフォーマンスに関する懸念を回避しますが、tcpdump自体はパフォーマンスにわずかなペナルティをもたらす可能性があります。このソリューションは、一般クエリログよりも少ないデータを記録します。

私は自分でこれを使用したことはありませんが、非常に便利に聞こえます。


良さそうに聞こえますが、リンクは機能しません。
-CarlosH

このリンクは今朝、Firefoxを使用して機能します。 mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski

そして、これに関するあなたの経験を聞いてみたいです。
ステファンLasiewski
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.