数据库——审计及触发器

news2024/12/24 11:47:35

智能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显示

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记删除CK不彻底问题 及 新增表TTL机制

问题背景:对CK表进行删除时,发现无法彻底删除,并报错如下: 同时也会有下面的报错信息: 解决过程: 确认CK 节点是否健康存活,select * from system.clusters 可以查看;确认CK元数据是…

抖店怎么运营?从开店到店铺维护,具体如下!

我是电商珠珠 抖店的热度很高,不少人都想要入驻,其中对于抖店的运营方面,新手不是很懂。 今天,我就来给大家详细的讲一下。 一、入驻 入驻的话需要新手准备一张个体工营业执照,身份证、银行卡、抖音号、手机和电脑…

UE4 图片环形轮播 蓝图

【需求】 图片环形轮播 任意图片之间相互切换 切换图片所需时间均为1s 两个图片之间切换使用就近原则 播放丝滑无闪跳 【Actor的组成】 每个图片的轴心都在原点 【蓝图节点】

Mybatis-plus介绍与入门

前言 MyBatis-Plus是在MyBatis基础上的一个增强工具库,旨在简化开发者的工作,提高开发效率,同时保留MyBatis的灵活性。使用 MyBatis-Plus 可以减少重复性的代码,简化常见的数据库操作 官方学习文档:MyBatis-Plus (bao…

Linux的重定向

Linux中的重定向是将程序的输入流或输出流从默认的位置改变到指定的位置。可以使用特殊的符号来实现重定向操作。(文中command代表命令) (1)重定向命令列表 命令 说明 command > file …

RNN和LSTM学习笔记-初学者

提示: 目录 前言一、RNN介绍二、LSTM介绍总结 前言 提示: 提示: 一、RNN介绍 RNN是一种短时记忆,而LSTM是长短时记忆网络 二、LSTM介绍 总结

【ITRA】赛事方收费标准-2024

一、查看ITRA收费情况 1、赛事方 必须注册赛事方的账户进入ITRA 看到的这个100欧,只是一个起步价格,并不是所有价格 不过这个对于一个赛事方可以cover一年的费用 2、更多费用 想当更大的怨种可以 往下拉满

WebGL+Three.js入门与实战——给画布换颜色、绘制一个点、三维坐标系

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

国产浪潮服务器:风扇免手动调节脚本

简介:浪潮集团,是中国本土顶尖的大型IT企业之一,中国领先的云计算、大数据服务商。浪潮集团旗下拥有浪潮信息、浪潮软件、浪潮国际,业务涵盖云计算、大数据、工业互联网等新一代信息技术产业领域,为全球120多个国家和地…

20.Java程序设计-基于SSM框架的安卓掌上校园生活系统的设计与实现

摘要: 随着移动互联网技术的快速发展,校园生活信息化成为提高学校管理效率、方便学生生活的关键。本研究以基于SSM(Spring Spring MVC MyBatis)框架的技术体系为基础,致力于设计与实现一款功能强大、高效稳定的安卓…

软件测试经典面试题(答案解析+视频讲解)

前言 (第一个就刷掉一大批人) 有很多“会自动化”的同学来咨询技术问题,他总会问到我一些元素定位的问题。元素定位其实都不算自动化面试的问题。 一般我都会问:你是定位不到吗?通常结果都是说确实定位不到。 做自…

【云原生kubernets】Pod详解

一、Pod介绍 1.1.概念 Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的State…

详细教程 - 从零开发 鸿蒙harmonyOS应用 第四节 (鸿蒙Stage模型 登录页面 ArkTS版 推荐使用)

在鸿蒙OS中,Ability是应用程序提供的抽象功能,可以理解为一种功能。在应用程序中,一个页面即一种能力,如登录页面,即具有登录功能的能力。以下是对鸿蒙新建项目的登录代码功能的详细解读和工作流程的描述: …

WINCC8.0脚本调试方法

前言 WINCC是西门子推出的过程可视化系统(SCADA),是基于PC的HMI系统,兼容WINDOWS各种系统,除了强大的图形系统之外,WINCC还具有在线历史趋势、报警记录、用户管理、用户归档等高级功能,而且WINC…

信息安全和网络安全的区别

信息安全与网络安全都属于安全领域,但它们的范围和重点不同。 信息安全主要关注数据的保护,包括对敏感数据进行加密、防止数据丢失或泄露等措施。信息安全通常与数据存储、传输和处理相关。 而网络安全更侧重于保护计算机系统和网络免受攻击、病毒、蠕…

UE5 动画 Sequencer-学习笔记

P2. 课程介绍 资料:https://www.bilibili.com/video/BV1Ag411873f?p2&vd_source707ec8983cc32e6e065d5496a7f79ee6 Sequencer不仅可以做互动动画,还可以导出视频与序列帧 P3-4. 界面介绍 https://www.bilibili.com/video/BV1Ag411873f?p3&spm_…

Certbot实现 HTTPS 免费证书(Let‘s Encrypt)自动续期

Certbot实现 HTTPS 自动续期 以前阿里云支持申请一年的免费https证书,那每年我们手动更新证书并没什么大问题,但现在阿里云的免费证书仅支持3个月,这意味着每三个月都要要申请一下证书显得非常麻烦。 下面我们使用Certbot实现ssl证书的自动…

C++相关闲碎记录(14)

1、数值算法 &#xff08;1&#xff09;运算后产生结果accumulate() #include "algostuff.hpp"using namespace std;int main() {vector<int> coll;INSERT_ELEMENTS(coll, 1, 9);PRINT_ELEMENTS(coll);cout << "sum: " << accumulate(…

C# WPF上位机开发(crc校验)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 为了验证数据传输的过程中有没有发生翻转&#xff0c;我们在传输报文的同时一般还会添加一个crc校验。对于modbus协议也是一样&#xff0c;它在数据…

帆软FCRP模拟题

制作步骤可见此博主&#xff1a;https://blog.csdn.net/Ipkiss_Yongheng/article/details/125594366 完成文件下载&#xff1a;【免费】帆软FCRP官网模拟题代码资源-CSDN文库