数据库——审计及触发器

智能2112杨阳  

一、目的与要求:

1.了解MySQL审计功能及实现方式

2.掌握触发器的工作原理、定义及操作方法

二、内容:

注:

  1. 在同一个触发器内编写多行代码,需要用结构begin ……end
  2. 函数current_user()获得当前登录用户名

1.自动保存对所有表(至少fruits表和orderitems表)的插入、更新、删除操作到opertaion表中。

增加opertaion

表1   opertaion表结构

字段名

字段说明

数据类型

主键

外键

非空

唯一

自增

id

ID号

int (11)

Y

N

Y

Y

Y

tablename

表名

varchar (50)

N

N

Y

N

N

opname

操作类型

varchar (50)

N

N

Y

N

N

optime

操作时间

datetime

N

N

Y

N

N

ConnUser

用户名

varchar(30)

N

N

Y

N

N

源码:

create table operation(

    id int(11) not null unique auto_increment,

    tablename varchar(50) not null,

    opname varchar(50) not null,

    -optime datetime not null,

    ConnUser varchar(30) not null,

primary key(id));

②创建基于fruitsorderitems插入、更新、删除触发器,该类触发器的功能是在执行相关操作时把操作相关信息写入opertaion表中。例如在fruits表中成功插入一项新的元组后,在opertaion表中自动增加一个元组,该元组描述了是对fruits表进行了插入操作。

源码:

create trigger insert_f after insert on fruits for each row

insert into operation(tablename,opname,optime,ConnUser) values('fruits','insert',now(),current_user());

create trigger update_f after update on fruits for each row

insert into operation(tablename,opname,optime,ConnUser) values('fruits','insert',now(),current_user());

create trigger delete_f after delete on fruits for each row

insert into operation(tablename,opname,optime,ConnUser) values('fruits','insert',now(),current_user());

create trigger insert_oi after insert on orderitems for each row

insert into operation(tablename,opname,optime,ConnUser) values('fruits','insert',now(),current_user());

create trigger update_oi after update on orderitems for each row

insert into operation(tablename,opname,optime,ConnUser) values('fruits','update',now(),current_user());

create trigger delete_oi after delete on orderitems for each row

insert into operation(tablename,opname,optime,ConnUser) values('fruits','delete',now(),current_user());

 

 

 

 

 

测试:用B001帐号(即销售人员帐号)登录,在fruits表中插入一条水果信息,再查看opertaion表是否实现自动添加更新记录。

运行测试结果截图:

insert into fruits values('o1',103,'cantaloupe',7.80,1000);

2. 实现自动更新fruits表中商品数量

在fruits表中增加一个属性quantity(库存商品数量) ,数据类型int(5),默认值为1000

源码:

alter table fruits add quantity int(5) default(1000);

运行测试结果截图:

创建触发器实现当客户下订单,fruits表对应此商品的数量自动的发生变化(减少或增加):

具体要求:

(1)在orderitems表中修改某个订单的商品数量后时, fruits表对应此商品的数量发生相应的改变。

(2)在orderitems表中增加一个购买详单(增加一个元组)时, fruits表对应此商品的数量发生相应的改变。

源码:

(1)

create trigger update_q after update on orderitems for each row

    update fruits set quantity=quantity+old.quantity-new.quantity where f_id=new.f_id;

update orderitems set quantity=30 where f_id='a1';

(2)

create trigger insert_q after insert on orderitems for each row

update fruits set quantity=quantity-new.quantity where f_id=new.f_id;

insert into orderitems values(30002,2,'b3',60,6.70);

运行测试结果截图:

(1)修改前:

 

修改后:

 

(2)

修改前:

 

修改后:

 

3.用Mysql8审计功能实现保存非root用户的更新操作( binlog + init-connect ):

  1. 创建审计数据库auditdb及表accesslog;

源码:

create database auditdb;

use auditdb;

create table accesslog(

          ID int(11) not null auto_increment,

          ServerID int(11) default null,

          ConnectionID int(11) default null,

          ConnUser varchar(30) default null,

          MatchUser varchar(30) default null,

          LoginTime datetime default null,

          primary key(ID)

)ENGINE=InnoDB auto_increment=1 default charset=utf8mb4;

 

 

  1. 为普通用户赋予写入表'accesslog'权限(每个非Root用户都要先授权,否则无法与数据库建立连接);

源码:

grant insert on `auditdb`.`accesslog` to `B001`@`%`;

flush privileges;

  1. 配置init-connect,用于当普通用户对目标数据库进行操作时自动写入审记表中,在my.ini(Linux系统下是my.cnf)中配置;

源码:

set global init_connect='insert auditdb.accesslog(ServerID,ConnectionID,ConnUser,MatchUser,LoginTime) values(@@server_id,connection_id(),user(),current_user(),now());';

  1. 开启mysql-binlog日志记录,在my.ini中配置:

           # 二进制日志 
log-bin=mysql-bin 
# binlog-do-db=db #
仅作用的库 
expire_logs_days = 20 
max_binlog_size = 300m 

  1. 重启mysql

源码:

net stop mysql

net start mysql

测试效果截图:

      

三、小结

1.遇到的问题及解决过程

问题:开始没理解触发器最后一题的题意,增加一个购买详单时没有选择插入一整个元组,而是单纯改变了一个数值,导致结果跟上一小题的做法没有区别。

解决过程:重新理解了题意,改为在表中添加元组。

2.产生的错误及原因分析

错误:插入数据时失败

    原因分析:忘了o_num为orders主键,必然唯一。

3.体会和收获。

本次博客通过对数据库进行一些列操作,学习和了解了触发器的工作原理、定义及操作方法。同时在实验中通过解决出现的问题与错误,在解决问题的过程中学到了更多的Mysql数据库相关的其他内容。通过后台的操控了解了更多可视化数据库管理系统的功能多样与数据库的用处之广,总的来说收获满满。

附:

1.解密mysql-bin查看内容(日志文件)

注意进入日志文件路径后再操作

C:\ProgramData\MySQL\MySQL Server 8.0\Data>mysqlbinlog  --base64-output=decode-row -vv  mysql-bin.000002  > ./mysql-bin.000002--vv.log

2.查看日志文件内容

C:\ProgramData\MySQL\MySQL Server 8.0\Data>more mysql-bin.000002--vv.log

3.根据thread_id号去找init-connect记录表的登录用户和源ip

mysql -u root -p123456 -e "select * from auditdb.accesslog  where connectionID=8 ;"

4.下载并安装MySQL Binlog Digger可视化分析日志

模拟插入或删除表中的一行,再用MySQL Binlog Digger显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/247787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cmake 从零开始源码安装(Ubuntu系统)

Ubuntu 系统安装 1、安装编译工具和依赖库 ## 必要的 sudo apt install gsudo apt install make## 与make 同等级的构建工具,为了演示而安装的 sudo apt install ninja-build## 压缩工具库 sudo apt install unzip## 加密和传输(根据系统名称可能不一样…

重温经典struts1之文件上传

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 今天来学习下,每个项目都会有的文件上传功能,看看struts是怎么实现的。 步骤 编写三个jsp页面,一个是跳转到文件上传页面&#xff…

改造哈希表,封装unordered_map和unordered_set

正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 unordered_map是存的是pair是K,V型的,而unordered_set是K型的&#xff…

vsftp 使用虚拟用户 —— 筑梦之路

很久之前写过一遍安装vsftp的文章: CentOS 7 vsftpd服务器搭建记录——筑梦之路-CSDN博客 安装一条命令就可以搞定,这里不再赘述。 配置vsftpd.conf # /etc/vsftpd/vsftpd.conf文件修改以下配置#不允许匿名用户认证 anonymous_enableNO #NO表示所有用…

从 0 开始创建 SpringBoot 项目

从 0 开始创建 SpringBoot 项目 从 0 开始创建 SpringBoot 项目环境准备创建项目项目目录结构及说明编写代码参考 从 0 开始创建 SpringBoot 项目 环境准备 操作系统:Windows 10IDE:IntelliJ IDEA 2023.3.1Java 版本:jdk1.8 工具网盘链接&…

记一次挖矿病毒的溯源

ps:因为项目保密的原因部分的截图是自己在本地的环境复现。 1. 起因 客户打电话过来说,公司web服务异常卡顿。起初以为是web服务缓存过多导致,重启几次无果后觉得可能是受到了攻击。起初以为是ddos攻击,然后去查看web服务器管理…

【数据结构c实现】顺序表实现

文章目录 线性表线性表的顺序实现顺序表结构顺序表初始化增配空间Inc打印顺序表show_list线性表长度length尾部插入push_back头部插入push_front尾部删除pop_back头部删除pop_front按位置插入insert_pos按值查找find按位置删除delete_pos按值删除delete_val排序sort(冒泡&#…

【设计模式--行为型--观察者模式】

设计模式--行为型--观察者模式 观察者模式定义结构案例优缺点使用场景JDK中提供的实现例:警察抓小偷 观察者模式 定义 又被成为发布订阅模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生…

6.23删除二叉搜索树中的节点(LC450-M)

算法: 一共有五种可能的情况: 第一种情况:没找到删除的节点,遍历到空节点直接返回了找到删除的节点 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根…

学习笔记10——Mysql的DDL语句

学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/contents/3/197161.html 数据库创建: CREATE DATABASE books; CREATE DATABASE IF NOT EXISTS books;更改字符集 ALTER DATABASE books CHARACTER SET gbk;库的删…

《数据结构、算法与应用C++语言描述》- 构建哈夫曼树

哈夫曼树 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_29huffmanTree 定长编码与可变长编码 定长编码 每个字符都用固定长度的编码来表示。 例如假设一个文本是由字符 a、u、x 和 z 组成的字符串,每个字符用2位二进…

ShardingSphereJDBC简单入门

ShardingSphere 介绍ShardingSphere-JDBCSharding-Sphere-ProxyShardingSphere-Sidecar混合架构运行模式DistSQL可拔插架构ShardingSphere的发展路线 主从复制ShardingSphere-JDBC功能SQL解析SQL支持程度SQL稳定支持SQL实验性支持 MySQL不支持SQL清单分页 数据分片垂直分片水平…

不再花冤枉钱!教你怎么选知识付费平台

在当今的知识付费市场中,用户面临的选择越来越多,如何从众多知识付费平台中正确选择属于自己的平台呢?下面,我们将为您介绍明理信息科技知识付费平台相比同行的优势,帮助您做出明智的选择。 一、创新的技术架构&#…

docker部署go gin框架 Windows环境

目录 文章目的是什么 环境介绍 Windows 环境下 docker 部署 go gin 详细步骤 运行容器时因为挂载文件可能会出现的问题 直接部署gin(跳过运行容器时因为挂载文件可能会出现的问题) 文章目的是什么 假设我们学习了 go 语言,在 Windows(本…

C语言 简单使用qsort 比较结构体字符串大小

1.先简单调用C语言封装好的冒泡排序 #include<stdio.h> #include<stdlib.h> #include<string.h> //qsort C语言封装好的冒泡排序 可比较任何类型 struct stu{char name[20];int age; }; //用户自己写的函数。函数名字也作为函数指针使用。是qsort函数的第四…

代码随想录第三十三天(一刷C语言)|斐波那契数爬楼梯使用最小花费爬楼梯

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 动态规划步骤&#xff1a; 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 一、斐波那契数 思路&#xff1a;参考carl文档 1、dp[i]的定义为&#xff…

PDI/Kettle-9.2.0.0-R(对应jdk1.8)源码编译问题记录及源码结构简介

目录 &#x1f4da;第一章 前言&#x1f4d7;背景&#x1f4d7;目的&#x1f4d7;总体方向 &#x1f4da;第二章 代码结构初识基本结构&#x1f4d7;代码模块详情 ⁉️问题记录❓问题一&#xff1a;代码分支哪些是发布版本❗答&#xff1a;后缀-R的版本 ❓问题二&#xff1a;50…

猫粮哪个牌子质量好性价比高?盘点十款主食冻干猫粮品牌排行榜!

在过去的100多年里&#xff0c;猫咪主食市场一直被膨化猫粮主导。然而&#xff0c;随着猫咪频频出现猝死、失明、发育不良以及营养不良等问题&#xff0c;猫主人们开始质疑膨化粮是否最适合猫咪。于是&#xff0c;从上世纪90年代开始&#xff0c;出现了生骨肉喂养。生骨肉确实是…

[算法总结] 十大排序算法

[算法总结] 十大排序算法 简介&#xff1a; 本文首发于我的个人博客&#xff1a;尾尾部落排序算法是最经典的算法知识。因为其实现代码短&#xff0c;应该广&#xff0c;在面试中经常会问到排序算法及其相关的问题。一般在面试中最常考的是快速排序和归并排序等基本的排序算法…

代码随想录算法训练营 | day48 动态规划 198.打家劫舍,213.打家劫舍Ⅱ,337.打家劫舍Ⅲ

刷题 198.打家劫舍 题目链接 | 文章讲解 | 视频讲解 题目&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被…