监控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一般需 ...
随机推荐
- Flutter -------- Drawer侧滑
侧滑菜单在安卓App里面非常常见 抽屉通常与Scaffold.drawer属性一起使用.抽屉的子项通常是ListView,其第一个子项是DrawerHeader ,它显示有关当前用户的状态信息.其余的 ...
- SpringMVC RequestLoggingFilter log to file
spring - How to Log HttpRequest and HttpResponse in a file? - Stack Overflowhttps://stackoverflow.co ...
- 使用 ASP.NET Core 创建 Web API及链接sqlserver数据库
创建 Web API https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.0& ...
- 【转载】 十图详解tensorflow数据读取机制(附代码)
原文地址: https://zhuanlan.zhihu.com/p/27238630 何之源 深度学习(Deep Learning) 话题的优秀回答者 --------------- ...
- Linux 在 TOP 命令中切换内存的显示单位
顶部的内存信息可以在top运行时按E切换,每次切换转换率为1000,只是没有单位,切换的单位为 k,m,g,t,p: 1. 2. 3., 4. 底下的进程信息按e切换,每次切换转换率为1000,切换的 ...
- Influxdb修改数据保留策略
retention policy: 存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据. ...
- Laya的图文混排
参考: Laya图文混排 Laya的图文混排教程 编辑模式F9,增加laya.html.js库 在层级窗口右键,添加一个HtmlDivElement组件 大致的原理: 1. 例如输入框的字符串是 &q ...
- Day1作业1:登陆接口(加入日志、注册功能)
流程图如下: 最先考虑使用python中的list,以能取到user_list中的用户信息,但中途发现没有比较好的方法截取取密码,还是新手的缘故,最终选择了使用dict,以方便截取用户名以及相应的密码 ...
- HTML中设置在浏览器中固定位置fixed定位
之前的博文 HTML布局排版之制作个人网站的文章列表,中链接到的文章本身,也需要返回到列表主页,可在每个文章页面加导航条,也可以只加个返回到列表主页的链接.刚开始是想在博文最下方,加个返回文章列表的链 ...
- 记联想SR850 Raid配置的一个bug
管理raid阵列时,如果要删除某个指定的阵列,则需要选中阵列名而不能选中虚拟磁盘.如果选中的是虚拟磁盘,点击删除后,会删除整个阵列列表里的第一个阵列,而非虚拟磁盘所在的阵列. 过程如下 联想SR850 ...
