MySQL數(shù)據(jù)庫(kù)可以通過(guò)改動(dòng)記錄來(lái)跟蹤IP,以保證數(shù)據(jù)安全和追溯性。下面我們來(lái)看一下如何進(jìn)行設(shè)置。
/* 創(chuàng)建數(shù)據(jù)庫(kù),我們可以將數(shù)據(jù)庫(kù)名命名為test */ CREATE DATABASE test; /* 創(chuàng)建一張表,名為user_info */ USE test; CREATE TABLE user_info( id INT(11) AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL ); /* 更改記錄,添加log_info表 */ USE test; CREATE TABLE log_info( id INT(11) AUTO_INCREMENT PRIMARY KEY, user_id INT(11) NOT NULL, operation VARCHAR(50) NOT NULL, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
通過(guò)以上操作,我們現(xiàn)在可以記錄下每個(gè)用戶的IP信息了。首先,我們先創(chuàng)建一個(gè)觸發(fā)器來(lái)監(jiān)聽(tīng)數(shù)據(jù)更改事件。
/* 創(chuàng)建觸發(fā)器 */ DELIMITER $$ CREATE TRIGGER update_user_info AFTER UPDATE ON user_info FOR EACH ROW BEGIN /* 獲取當(dāng)前操作的用戶的IP */ DECLARE user_ip VARCHAR(20); SET user_ip = (SELECT CONNECTION_ID()); /* 將該次更新記錄到log_info表中 */ INSERT INTO log_info(user_id, operation) VALUES(NEW.id, 'Update by ' + user_ip); END$$ DELIMITER ;
這里我們需要注意的是,在使用CONNECTION_ID()函數(shù)獲取用戶IP時(shí),需要先設(shè)置一下客戶端的字符集。
/* 設(shè)置客戶端字符集為UTF8 */ SET NAMES utf8;
到了這一步,我們就完成了MySQL數(shù)據(jù)庫(kù)的IP跟蹤。每次有用戶對(duì)user_info表進(jìn)行更改時(shí),都會(huì)往log_info表中插入一條記錄,記錄該操作的用戶IP。這樣,我們就可以針對(duì)每一條更改記錄進(jìn)行追溯。