web-dev-qa-db-ja.com

MySQLデータベースのアクセスと使用状況をログに記録するにはどうすればよいですか?

私は現在、さらなる監査のために、開発者(サービスではない)による一連のMySQLデータベースのアクセスおよび使用のロギングを生成する既存の実装方法を探しています。現在の見積もりでは、すべてのトラフィックは、すべてをログに記録し、それをターゲットデータベースサーバーに透過的に転送するプロキシを経由する必要があります。 MySQL内のロギングメカニズムを調べてみましたが、必要な情報が生成されないようです。

私の評価は正しいですか?

この質問がここにあるかどうか(または2番目の質問を投稿する必要があるかどうか)はわかりませんが、私はHashiCorp Vaultと呼ばれるものを読んでいます。一元化されたシークレットストレージシステムが監査用のログの生成にどのように役立つかわかりません。

この想定されたVaultが実際にアクセスをログに記録するか、プロキシとして機能するかどうか誰かが知っていますか?

2
hanzo2001

MySQLにはロギングメカニズムがありますが、デフォルトでは有効になっていません。エラーログ、アクセスログ、一般クエリログ、スロークエリログがあります。

まず、任意のテキストエディターを使用して/ etc/mysql/conf.d/mysqld_safe_syslog.cnfに移動し、ロギングに関連する行をコメント化します。次に、MySQL構成ファイル(/ etc/mysql/my.cnf)に移動し、次の行を追加します。

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log
[mysqld] 
log_error=/var/log/mysql/mysql_error.log
general_log_file = /var/log/mysql/mysql.log 
general_log = 1     
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

この後、MySQLdサービスを再起動する必要があります:Sudo service mysql restart

次に、実行時にロギングが有効になっていることを確認したい...これを行うには、最初にMySQLクライアントにログインし(mysql -u root -p)、次のグローバル値を設定します。

SET GLOBAL general_log = 'ON'; 
SET GLOBAL slow_query_log = 'ON';

あなたの質問を完全に理解したかどうかはわかりませんが、それがエラーやアクセス試行であり、ログに記録したいクエリがある場合は、これで十分です。ログに記録したいものがあるかどうかをお知らせください。これは、プロキシサーバーを必要とせずに問題なく実行できると思います。

または、これを行うために使用できるプラグインがあります。また、MySQLではデフォルトでロギングが無効になっているにもかかわらず、エラーはsyslogを介して記録されることに注意してください。

1
MLT

MySQLデータベースからHIPAAおよびPCIデータセキュリティ標準のデータへのアクセスを追跡する場合は、MySQL Enterprise Auditプラグインが必要です。また、MariaDB監査プラグインもあります。

1
Daniel