다음 편집기에서는 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에 추가해야 합니다. 그렇지 않으면 다음에 다시 시작할 때 유효하지 않게 됩니다.
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());';
3. 일반 사용자에게 액세스 로그 테이블에 대한 삽입 권한을 부여합니다
이 점이 매우 중요합니다.
이 매개변수는 일반 사용자에게만 적용되며 슈퍼 권한이 있는 사용자에게는 적용되지 않습니다.
일반 사용자인 경우 이 기능을 추가한 후
user@'xx.xx.xx에게 db_monitor.accesslog에 대한 삽입 권한을 부여해야 합니다. % ';
인증하지 않으면 데이터베이스 연결이 실패합니다.
액세스 로그 테이블에 삽입 권한이 없는 사용자:
mysql> show databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 7 Current database: *** NONE *** ERROR 1184 (08S01): Aborted connection 7 to db: 'unconnected' user: 'user2' host: 'localhost' (init_connect command failed)
4. 감사 기능 확인
사용자가 테스트 라이브러리에서 테이블을 삭제했는지 확인해 보겠습니다. binlog 로그를 사용하여 확인하세요.
binlog 보기:
감사를 완료하기 위해 작업을 수행한 사용자를 확인하세요.
위 내용은 액세스 감사 기능을 추가하기 위해 init-connect를 사용하는 mysql의 예를 공유하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!