Maison >base de données >tutoriel mysql >Partagez un exemple de MySQL utilisant init-connect pour ajouter une fonction d'audit d'accès

Partagez un exemple de MySQL utilisant init-connect pour ajouter une fonction d'audit d'accès

零下一度
零下一度original
2017-04-21 15:56:562258parcourir

L'éditeur suivant vous proposera un article sur l'implémentation de MySQL en utilisant init-connect pour augmenter la fonction d'audit d'accès. L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un œil

Les connexions Mysql doivent d'abord être initialisées via init-connect puis connectées à l'instance.

Nous en profitons et implémentons la fonction d'audit d'accès à la base de données en enregistrant le thread_id, le nom d'utilisateur et l'adresse de l'utilisateur lors de la connexion init.

Étapes de mise en œuvre

1. Créez une table de bibliothèque pour l'audit.

Afin de ne pas entrer en conflit avec la bibliothèque entreprise, créez votre propre bibliothèque séparément :


#建库表代码
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. Configurez le paramètre init-connect

Ce paramètre peut être ajusté dynamiquement, et assurez-vous de l'ajouter au fichier de configuration my.cnf, sinon il deviendra invalide après le prochain redémarrage ;


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. Accordez aux utilisateurs ordinaires l'autorisation d'insérer sur la table du journal d'accès

Ce point est très important

Ce paramètre ne prend effet que pour les utilisateurs ordinaires, pas pour ceux disposant de super autorisations.

Si vous êtes un utilisateur ordinaire, après avoir ajouté cette fonction, vous devez autoriser :

accorder l'insertion sur db_monitor.accesslog à user@'xx.xx.xx. % ';

La conséquence de ne pas autoriser est que la connexion à la base de données échouera :

Utilisateurs sans autorisations d'insertion dans la table du journal d'accès :


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. Vérifiez la fonction d'audit

Un utilisateur a supprimé une table dans la bibliothèque de test. nous pouvons le suivre avec le journal binlog. Quel utilisateur sera là :

Partagez un exemple de MySQL utilisant init-connect pour ajouter une fonction d'audit d'accès

Vérifiez le journal binlog :

Partagez un exemple de MySQL utilisant init-connect pour ajouter une fonction d'audit d'accès

Vous pouvez voir de quel utilisateur il s'agit. Des actions ont été entreprises, complétant ainsi l'audit.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn