Heim  >  Artikel  >  Datenbank  >  Teilen Sie ein Beispiel für MySQL mit init-connect, um eine Zugriffsüberwachungsfunktion hinzuzufügen

Teilen Sie ein Beispiel für MySQL mit init-connect, um eine Zugriffsüberwachungsfunktion hinzuzufügen

零下一度
零下一度Original
2017-04-21 15:56:562239Durchsuche

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 wichtig

Dieser 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. % ';

Die Folge einer fehlenden Autorisierung ist, dass die Verbindung zur Datenbank fehlschlägt:

Benutzer ohne Einfügeberechtigung in der Accesslog-Tabelle:


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:

Teilen Sie ein Beispiel für MySQL mit init-connect, um eine Zugriffsüberwachungsfunktion hinzuzufügen

Überprüfen Sie das Binlog:

Teilen Sie ein Beispiel für MySQL mit init-connect, um eine Zugriffsüberwachungsfunktion hinzuzufügen

Sie können sehen, um welchen Benutzer es sich handelt. Aktionen wurden durchgeführt und somit ist die Prüfung abgeschlossen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn