my sql init-connect 를 이용 하여 방문 감사 기능 의 실현 을 증가 합 니 다.

2454 단어 mysqlinitconnect
my sql 의 연결 은 우선 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.일반 사용자 에 게 accesslog 표 에 대한 insert 권한 부여
그 점 이 중요 해 요.
이 매개 변 수 는 일반 사용자 에 게 만 적용 되 며 슈퍼 권한 이 있 는 사람 은 모두 작용 하지 않 습 니 다.
일반 사용자 라면 이 기능 을 추가 한 후 권한 을 부여 해 야 합 니 다.
grant insert on db_monitor.accesslog to user@'xx.xx.xx.%';
권한 을 부여 하지 않 은 결 과 는 데이터 베 이 스 를 연결 하 는 데 실패 합 니 다.
accesslog 표 에 insert 권한 이 없 는 사용자:

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.감사 기능 검증
한 사용자 가 test 라 이브 러 리 에 표를 삭 제 했 습 니 다.binlog 로그 에 맞 춰 어느 사용 자 를 추적 할 수 있 는 지 확인 하 십시오.

binlog 보기:

어떤 사용자 가 조작 을 해서 감 사 를 마 쳤 는 지 알 수 있다.
이상 의 my sql 은 init-connect 를 이용 하여 방문 감사 기능 을 추가 하 는 실현 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기