11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了……作为一名美创的员工,客户才是第一位,我毫不犹豫的摁下了接听键。

XXX吗?我数据库有人篡改了某张表,我一听,这个问题应该难度不大(自信ing!),赶紧回应客户:

您数据库有保留最近一次完整备份以及之后的完整日志吗?

1、有的话可以用完整备份恢复+日志备份(误操作前的LSN恢复)

2、也可以通过sys.fn_dblog()获取二进制日志,再解析出来误操作的语句进行恢复

结果客户的需求并不是该操作如何恢复,而是想确定这个篡改表的始作俑者,以及如何去记录以后数据库这种类似的情况。我很清楚的告诉客户,再没部署任何监控记录的基础上,解析日志也只能获取相关的数据记录,无法获取更过的信息(当然,不排除某种高端工具可能会获取)。

至于以后如何防患,如何记录,这个可以通过SQL server触发器或者审计功能来实现,而本文,将着重介绍DML触发器以及它如何实现客户的需求,请看下文。

01

DML触发器介绍

DML触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。

02

常见的DML触发器

2.1 创建语句

2.2 插入测试

可见,因为触发器的缘故,不满足要求的数据无法插入(这里的age>=100虽有悖常理,实则祝大家都长命百岁,哈哈)

回到我们的主旨,这种触发器虽然能起到防患的作用,但是依旧无法达到我们预期的效果,我们不仅要防患于未然,更要能事事追踪溯源,话不多说,请看下文,也是我们这篇文章最最重要的干货!!!

03

如何用DML触发器记录操作

实现原理:

DML操作记录,简单的说,就是日志类触发器,也就是尽量全面地反映数据库表所进行的insert、update、delete操作,便于日后翻阅。

1、创建测试表:

2、创建DML日志表:

3、创建DML触发器:

4、查看当前触发器日志表:

5、用hostnameadministrator执行DML操作:

执行结果为:

6、再用dsz登录执行DML操作:

执行结果为:

7、查看DML日志表:

显而易见,刚才的6次insert,2次update(一次update对应两条记录,因为分别记录了name的更改前后的值—),以及2次delete,都清楚的记录在该表内。

眼尖的网友可能要问,USERID和HOSTNAME很清楚,最后这两列有什么特殊的含义吗?

我们的触发器日志表如果仅仅记录一些基础的信息,还远远不够,我们还要将更改的数据挖掘出来,以便在需要的时候进行逆向DML。

那么,我们是不是也可以修改日志表,添加更多我们需要捕获的信息呢,答案是肯定的,不过这个就交给广大网友去探索、去更改了……

8、truncate 掉test表,再查看DML日志表:

可以看到,依旧只有12条记录,这是为什么呢?明明test的表都被删干净了啊???

莫慌莫慌,大家都知道,truncate和delete不同,它属于DDL语句,所以,关于DDL的触发器,且看下回分解,不要走开哦。

美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。

转自杭州美创科技有限公司公众号,如需二次转载,请联系marketing@mchz.com.cn

mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...相关推荐

  1. sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器

    各位新朋友-记得先点蓝字关注我哦- 11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了--作为一名美创的员工,客户才是第一位 ...

  2. SQL Server 2005 学习笔记之触发器简介[转]

    触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...

  3. SQL Server编程(06)触发器

    SQL Server 通过触发器用来保证业务逻辑和数据的完整性.在SQL Server中,触发器是一种特殊类型的存储过程,可在执行语言事件时自动触发.SQL Server中触发器包括三种:DML触发器 ...

  4. sql server 2005学习笔记之触发器简介(一)

    触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...

  5. MySQL异步复制延迟解决的架构设计与运维架构ppt

    <MySQL异步复制延迟解决的架构设计与运维架构ppt> 下载地址:网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731216.html

  6. BULK INSERT如何将大量数据高效地导入SQL Server

    转载自:http://database.51cto.com/art/201108/282631.htm BULK INSERT如何将大量数据高效地导入SQL Server 本文我们详细介绍了BULK ...

  7. mysql 触发器不能同时 insert or update or delete_MySQL6:触发器

    什么是触发器 MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序.触发器是由事件来触发某个操作,这些事件包括INSERT.UPDATE和DELETE语句.如果定义了触 ...

  8. mysql 注入 update_利用insert,update和delete注入获取数据_MySQL

    0x00 简介 利用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于select查询语句中的SQL注射点来实现的.那么,当我们发现了一个基于i ...

  9. MySQL数据库---子查询insert,update,delete语句中嵌套子查询

    十.子查询的使用(重点) 1.子查询:指的是查询语句,嵌套查询语句---->一般是放在where子句中,表示条件. 2.子查询的应用使用场景: 2.1查询过程中,虽然给了条件,但是条件的结果并不 ...

最新文章

  1. 维吉尼亚密码(Vigenère Cipher)
  2. 时间固定效应和个体固定效应的选择_互助问答第31期:固定效应与随机效应选择和面板数据处理...
  3. flink shell出现Could not create the DispatcherResourceManagerComponent
  4. jpa 查询 列表_终极JPA查询和技巧列表–第3部分
  5. Android之智能问答机器人
  6. Scrapy 爬虫框架五—— 常见的反爬虫技术
  7. Centos 6.5 安装 Nginx+MySQL+PHP
  8. 小米MIX 4要来了?这硬件“堆”的也是没谁了 全是最新技术
  9. C语言编程数出1到100的整数中出现了多少次数字9
  10. 机器学习_贝叶斯算法
  11. python简单代码大全-python代码大全
  12. 综合布线系统工程设计规范GB50311-2007
  13. 2022年固定资产管理系统的概况
  14. 如何用elastic APM实现用户行为轨迹监控(User Journey Monitoring)
  15. 电脑专业英语1500词-2
  16. 在Unity中通过NGUI UITexture制作动态聊天表情
  17. 一文看懂国内人工智能行业产业链全景(必收藏)
  18. 【前端技术】一篇文章搞掂:JS
  19. 汇编基础--cmp汇编指令
  20. 批量识别图片大致不相同图片_电脑图片太多,其中不少是重复的,有无什么软件可以识别相同图片!...

热门文章

  1. php 数据分别是怎么传的_四种php页面间传递数据方法
  2. php 字符串拼接效率,php中3种字符串连接的效率比较实例详解
  3. 下次激活策略10_巅峰武侠卡牌巨制手游乱世江湖1元商城特权bt版今日10:00上线_乱世江湖...
  4. mysql日志是什么格式_Mysql日志的三种格式
  5. 如何吧本地仓库提交到github_解锁GitHub(5)之GitHub本地仓库使用
  6. phpmailer 私密抄送_使用 phpmailer 发送邮件,支持抄送、密送和发送附件
  7. MySQL中的char和varchar类型
  8. java中bitconverter_C#中BitConverter.ToUInt16()和BitConverter.ToString()的简单使用
  9. 加拿大留学商科好还是计算机科学好,去加拿大读商科专业就是要选择这些才最好!...
  10. esp8266设置sta失败_使用NodeMCU_ESP8266驱动OLED