Der folgende Editor bringt Ihnen einen Artikel über die Implementierung von MySQL mithilfe von init-connect, um die Zugriffsüberwachungsfunktion zu verbessern. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor und werfen wir einen Blick darauf
MySQL-Verbindungen müssen zunächst über init-connect initialisiert und dann mit der Instanz verbunden werden.
Wir machen uns dies zunutze und implementieren die DB-Zugriffsüberwachungsfunktion, indem wir während der Init-Verbindung die Thread-ID, den Benutzernamen und die Benutzeradresse des Benutzers aufzeichnen.
Implementierungsschritte
1. Erstellen Sie eine Bibliothekstabelle für die Prüfung.
Um keinen Konflikt mit der Geschäftsbibliothek zu verursachen, erstellen Sie Ihre eigene Bibliothek separat:
#建库表代码 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. Konfigurieren Sie den Init-Connect-Parameter
Dieser Parameter kann dynamisch angepasst werden. Fügen Sie ihn unbedingt zur Konfigurationsdatei my.cnf hinzu, da er sonst nach dem ungültig wird nächster Neustart;
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. Erteilen Sie normalen Benutzern die Berechtigung zum Einfügen in die Zugriffsprotokolltabelle
Dieser Punkt ist sehr wichtigDieser Parameter ist nur für normale Benutzer wirksam und hat keine Auswirkungen auf Benutzer mit Superberechtigungen. Wenn Sie ein normaler Benutzer sind, müssen Sie nach dem Hinzufügen dieser Funktion Folgendes autorisieren:Einfügung in db_monitor.accesslog an user@'xx.xx.xx gewähren. % ';
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)
Überprüfen Sie die Audit-Funktion
Ein Benutzer hat eine Tabelle in der Testbibliothek gelöscht Wir können es mit dem Binlog-Protokoll verfolgen. Welcher Benutzer dort sein wird:Das obige ist der detaillierte Inhalt vonTeilen Sie ein Beispiel für MySQL mit init-connect, um eine Zugriffsüberwachungsfunktion hinzuzufügen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!