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

零下一度
Libérer: 2017-04-21 15:56:56
original
2262 Les gens l'ont consulté

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;
Copier après la connexion

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());';
Copier après la connexion

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)
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal