监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)
原文:监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)
在有些公司中,由于管理的不规范,或者是便于开发人员直接修改、部署程序,往往任何开发人员,都能登录到生产环境的数据库直接进行操作。
当然啦,一般的select语句可能不会导致什么太大的问题,但如果是delete和update,而由于某些开发人员忘记写where条件,或者条件写错了,导致一下子删除或更新了,导致数据出了问题,最关键的是当发现问题后,没有人承认这个是他干的,那该怎么办呢?
下面就是通过DML触发器,来监控哪些IP的机器,在什么时候进行了update操作:
-
--要跟踪的表
-
if OBJECT_ID('wc') is not null
-
drop table wc
-
go
-
-
-
create table wc(id int,vv varchar(10))
-
-
insert into wc
-
select 1,'abc' union all
-
select 2,'abc' union all
-
select 3,'abc'
-
go
-
-
-
--存放审核信息的表
-
if OBJECT_ID('audit_table') is not null
-
drop table audit_table
-
go
-
-
create table audit_table
-
(
-
id int identity(1,1) primary key,
-
-
spid int,
-
operation nvarchar(20),
-
exec_sql nvarchar(max),
-
-
connect_time DATETIME,
-
net_transport NVARCHAR(40),
-
protocol_type NVARCHAR(40),
-
auth_scheme NVARCHAR(40),
-
client_net_address VARCHAR(48),
-
client_tcp_port int,
-
local_net_address VARCHAR(48),
-
local_tcp_port int,
-
-
host_name NVARCHAR(128),
-
program_name NVARCHAR(128),
-
host_process_id int,
-
client_interface_name NVARCHAR(32),
-
-
exec_datetime datetime
-
)
-
go
-
-
-
--触发器
-
create trigger dbo.trigger_wc
-
on wc
-
after update
-
as
-
-
declare @t table(eventtype nvarchar(14),prama smallint,eventinfo nvarchar(max))
-
-
insert into @t(eventtype,prama,eventinfo)
-
exec('DBCC INPUTBUFFER('+@@spid+')')
-
-
insert into audit_table
-
select @@SPID,
-
'UPDATE',
-
(select eventinfo from @t),
-
(select connect_time from sys.dm_exec_connections where session_id = @@spid),
-
(select net_transport from sys.dm_exec_connections where session_id = @@spid),
-
(select protocol_type from sys.dm_exec_connections where session_id = @@spid),
-
(select auth_scheme from sys.dm_exec_connections where session_id = @@spid),
-
(select client_net_address from sys.dm_exec_connections where session_id = @@spid),
-
(select client_tcp_port from sys.dm_exec_connections where session_id = @@spid),
-
(select local_net_address from sys.dm_exec_connections where session_id = @@spid),
-
(select local_tcp_port from sys.dm_exec_connections where session_id = @@spid),
-
-
(select [host_name] from sys.dm_exec_sessions where session_id = @@spid),
-
(select [program_name] from sys.dm_exec_sessions where session_id = @@spid),
-
(select host_process_id from sys.dm_exec_sessions where session_id = @@spid),
-
(select client_interface_name from sys.dm_exec_sessions where session_id = @@spid),
-
GETDATE()
-
go
-
-
--更新数据
-
update wc
-
set vv = 'aaa'
-
-
-
--查看记录
-
select *
-
from audit_table
下面是监控结果:
监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)的更多相关文章
- 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)
原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...
- SQL Server 数据库DML触发器 【一】
今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内 ...
- SQL Server如何用触发器捕获DML操作的会话信息
需求背景 上周遇到了这样一个需求,维护人员发现一个表的数据经常被修改,由于历史原因:文档缺少:以及维护人员的经常变更,导致他们对系统也业务也不完全熟悉,他们也不完全清楚哪些系统和应用程序会对这个表的数 ...
- Sql Server系列:触发器
触发器的一些常见用途: ◊ 强制参照完整性 ◊ 常见审计跟踪(Audit Trails):这意味着写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据. ◊ 创建与CHECK约束 ...
- SQL Server 中的触发器(trigger)
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...
- SQL Server 2005/2008 触发器的管理和查看
1.通过可视化操作来管理和查看触发器 在Microsoft SQL Server Management Studio中,选中某一数据库的某一张表时,在“对象资源管理器详细”窗口中有“触发器”项.通过“ ...
- Sql Server数据库之触发器
阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念: 触发器(trigger)是SQL server 提供给程序员和数据分析 ...
- SQL Server封闭掉 触发器递归
SQL Server关闭掉 触发器递归SQL Server 是有一个开关, 可以关闭掉 触发器递归的.EXEC sp_dboption '数据库名字', 'recursive triggers', ...
- SQL Server自动化运维系列——监控性能指标脚本(Power Shell)
需求描述 一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控 监控值范围 根据经验,作为DBA一般需 ...
随机推荐
- [JDBC]查询结果集把字段名和字段值一起竖向输出
代码: package com.hy.fieldandvalue; import java.sql.Connection; import java.sql.DriverManager; import ...
- 8款超好用的SVG编辑工具用起来
随着响应式网页的发展,对于内容呈现的要求也越来越高,尤其是图像.为了在各种设备上能实现自然伸缩或扩展而不影响图片质量,所以矢量图形(SVG)正变得越来越受欢迎. 大家都知道,在计算机图形学中,有两种主 ...
- Faster async functions and promises
https://v8.dev/blog/fast-async async function computeAnswer() { return 42;}undefinedconst p = comput ...
- c代码审查软件
1. Coccinelle http://coccinelle.lip6.fr/
- 关于[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] 的解释
关于[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] 的解释 [StructLayout(LayoutKind.Sequentia ...
- 按钮显示隐藏div、input等
<script type="text/javascript"> function show() { var value = document.getElementByI ...
- RabbitMQ 入门教程(PHP版) 第一部分:Hello World
abbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ是一个邮箱.邮局.邮递 ...
- 深入理解ElasticSearch(PDF版 内含目录)
深入理解ElasticSearch 介绍: 本书涵盖了Elasticsearch的许多中高级功能,并介绍了缓存.ApacheLucene库以及监控等模块的内部运作机制.其中,还涉及一些实用案例,比如配 ...
- GNU C之__attribute__
__attribute__可以设置函数属性(Function Attribute).变量属性(Variable Attribute)和类型属性(Type Attribute) __attribute_ ...
- colaboratory安装指定版本的tensorflow
查看当前安装的tensorflow版本 !pip show tensorflow 安装指定版本 !pip install tensorflow==2.0 这速度,香不香.
