监控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一般需 ...
随机推荐
- ubuntu下安装ftp服务
1. 安装vsftpd $ sudo apt-get install vsftpd 2. 创建一个用户user-ftp用于ftp服务 $ sudo adduser user-ftp 3.创建一个文件/ ...
- PHP中Cookie与 Session
在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用 Cookie与 Session 来跟踪和判断. Sess ...
- Syntax error: "(" unexpected shell里面的报错解决
author:headsen chen date : 2019-08-08 11:11:38 notice : 个人原创 Ubuntu上运行shell脚本总是报下面这个错误,在centos下面或者 ...
- Mac 终端显示git分支
1 进入你的home目录 cd ~ 2 编辑.bashrc文件 vi .bashrc 3 将下面的代码加入到文件的最后处 function git_branch { branch="`git ...
- memcpy字节序问题
/* memcpy用法详解 */ #include <stdio.h> #include <stdlib.h> #include <string.h> //memc ...
- 【PHP】 解决array_filter会过滤0 false的问题
定义和用法 array_filter() 函数用回调函数过滤数组中的元素. 该函数把输入数组中的每个键值传给回调函数.如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组.数组键名保持不 ...
- 通过直方图进行PCA准备
import graphviz import mglearn from mpl_toolkits.mplot3d import Axes3D from sklearn.datasets import ...
- Spring MVC入门的实例
作为Spring MVC入门,以XML配置的方式为例.首先需要配置Web工程的web.xml文件. 代码清单14-1:web.xml配置Spring MVC <?xml version=&q ...
- div定位relative和absolute测试1
div里的position定位也是比较常见的,relative是相对定位,absolute是绝对定位.如本文测试:body自带8px的margin,这里不对其进行清空.蓝色的div和红色的div分别设 ...
- 原生JavaScript常用本地浏览器存储方法四(HTML5 LocalStorage sessionStorage)
HTML5 LocalStorage浏览器的支持的情况如上图,IE在8.0的时候就支持了.不过需要注意的是,IE测试的时候需要服务器环境(或者localhost). 测试自然是检测浏览器是否支持本地存 ...
