以下のエディターは、アクセス監査機能を強化するための init-connect を使用した mysql の実装に関する記事をお届けします。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って、mysql の接続を最初に init-connect によって初期化し、次にインスタンスに接続する必要があります。
これを利用して、init-connect 中にユーザーの thread_id、ユーザー名、ユーザー アドレスを記録することで、DB アクセス監査機能を実装します。
実装手順
1. 監査用のライブラリテーブルを作成します。 ビジネス ライブラリと競合しないように、独自のライブラリを別途作成します:
#建库表代码 create database db_monitor ; use db_monitor ; CREATE TABLE accesslog ( thread_id int(11) DEFAULT NULL, #进程id log_time datetime default null, #登录时间 localname varchar(50) DEFAULT NULL, #登录名称,带详细ip matchname varchar(50) DEFAULT NULL, #登录用户 key idx_log_time(log_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. init-connect パラメータを設定します このパラメータは動的に調整できます。また、料金もお支払いください。設定ファイル my.cnf を追加することに注意してください。追加しない場合は、次回の再起動後に無効になります
3. 一般ユーザーにアクセスログテーブルへの挿入権限を付与します
この点は非常に重要ですこのパラメータは通常のユーザーに対してのみ有効です。スーパー権限を持つユーザーであっても効果はありません。
通常のユーザーの場合は、次の関数を追加した後に認証する必要があります:
grant insert on db_monitor.accesslog to user@'xx.xx.xx.%';
認証しない場合の結果は次のとおりです。 : データベースへの接続は失敗します:
アクセスログ テーブルに挿入権限のないユーザー:
mysql> show variables like 'init_connect%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | init_connect | | +---------------+-------+ 1 row in set (0.00 sec mysql> set global init_connect='insert into db_monitor.accesslog(thread_id,log_time,localname,matchname) values(connection_id(),now(),user(),current_user());';
4. 監査機能を確認します
ユーザーがテスト ライブラリ内のテーブルを削除したかどうかを確認します。 binlog ログと連携できます。追跡できるユーザー:
binlog の表示:
どのユーザーが操作を実行したかを確認でき、監査が完了します。
以上がinit-connect を使用してアクセス監査機能を追加する mysql の例を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。