原文:监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)


在有些公司中,由于管理的不规范,或者是便于开发人员直接修改、部署程序,往往任何开发人员,都能登录到生产环境的数据库直接进行操作。

当然啦,一般的select语句可能不会导致什么太大的问题,但如果是delete和update,而由于某些开发人员忘记写where条件,或者条件写错了,导致一下子删除或更新了,导致数据出了问题,最关键的是当发现问题后,没有人承认这个是他干的,那该怎么办呢?

下面就是通过DML触发器,来监控哪些IP的机器,在什么时候进行了update操作:

    1. --要跟踪的表
      1. if OBJECT_ID('wc') is not null
        1. drop table wc
          1. go
                1. create table wc(id int,vv varchar(10))
                    1. insert into wc
                      1. select 1,'abc' union all
                        1. select 2,'abc' union all
                          1. select 3,'abc'
                            1. go
                                  1. --存放审核信息的表
                                    1. if OBJECT_ID('audit_table') is not null
                                      1. drop table audit_table
                                        1. go
                                            1. create table audit_table
                                              1. (
                                                1. id int identity(1,1) primary key,
                                                    1. spid int,
                                                      1. operation nvarchar(20),
                                                        1. exec_sql nvarchar(max),
                                                            1. connect_time DATETIME,
                                                              1. net_transport NVARCHAR(40),
                                                                1. protocol_type NVARCHAR(40),
                                                                  1. auth_scheme NVARCHAR(40),
                                                                    1. client_net_address VARCHAR(48),
                                                                      1. client_tcp_port int,
                                                                        1. local_net_address VARCHAR(48),
                                                                          1. local_tcp_port int,
                                                                              1. host_name NVARCHAR(128),
                                                                                1. program_name NVARCHAR(128),
                                                                                  1. host_process_id int,
                                                                                    1. client_interface_name NVARCHAR(32),
                                                                                        1. exec_datetime datetime
                                                                                          1. )
                                                                                            1. go
                                                                                                  1. --触发器
                                                                                                    1. create trigger dbo.trigger_wc
                                                                                                      1. on wc
                                                                                                        1. after update
                                                                                                          1. as
                                                                                                              1. declare @t table(eventtype nvarchar(14),prama smallint,eventinfo nvarchar(max))
                                                                                                                  1. insert into @t(eventtype,prama,eventinfo)
                                                                                                                    1. exec('DBCC INPUTBUFFER('+@@spid+')')
                                                                                                                        1. insert into audit_table
                                                                                                                          1. select @@SPID,
                                                                                                                            1. 'UPDATE',
                                                                                                                              1. (select eventinfo from @t),
                                                                                                                                1. (select connect_time from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                  1. (select net_transport from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                    1. (select protocol_type from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                      1. (select auth_scheme from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                        1. (select client_net_address from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                          1. (select client_tcp_port from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                            1. (select local_net_address from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                              1. (select local_tcp_port from sys.dm_exec_connections where session_id = @@spid),
                                                                                                                                                  1. (select [host_name] from sys.dm_exec_sessions where session_id = @@spid),
                                                                                                                                                    1. (select [program_name] from sys.dm_exec_sessions where session_id = @@spid),
                                                                                                                                                      1. (select host_process_id from sys.dm_exec_sessions where session_id = @@spid),
                                                                                                                                                        1. (select client_interface_name from sys.dm_exec_sessions where session_id = @@spid),
                                                                                                                                                          1. GETDATE()
                                                                                                                                                            1. go
                                                                                                                                                                1. --更新数据
                                                                                                                                                                  1. update wc
                                                                                                                                                                    1. set vv = 'aaa'
                                                                                                                                                                          1. --查看记录
                                                                                                                                                                            1. select *
                                                                                                                                                                              1. from audit_table
                                                                                                                                                                            1.  

                                                                                                                                                                            下面是监控结果:

                                                                                                                                                                            发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

                                                                                                                                                                            监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)的更多相关文章

                                                                                                                                                                            1. 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)

                                                                                                                                                                              原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...

                                                                                                                                                                            2. SQL Server 数据库DML触发器 【一】

                                                                                                                                                                              今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内 ...

                                                                                                                                                                            3. SQL Server如何用触发器捕获DML操作的会话信息

                                                                                                                                                                              需求背景 上周遇到了这样一个需求,维护人员发现一个表的数据经常被修改,由于历史原因:文档缺少:以及维护人员的经常变更,导致他们对系统也业务也不完全熟悉,他们也不完全清楚哪些系统和应用程序会对这个表的数 ...

                                                                                                                                                                            4. Sql Server系列:触发器

                                                                                                                                                                              触发器的一些常见用途: ◊ 强制参照完整性 ◊ 常见审计跟踪(Audit Trails):这意味着写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据. ◊ 创建与CHECK约束 ...

                                                                                                                                                                            5. SQL Server 中的触发器(trigger)

                                                                                                                                                                              SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...

                                                                                                                                                                            6. SQL Server 2005/2008 触发器的管理和查看

                                                                                                                                                                              1.通过可视化操作来管理和查看触发器 在Microsoft SQL Server Management Studio中,选中某一数据库的某一张表时,在“对象资源管理器详细”窗口中有“触发器”项.通过“ ...

                                                                                                                                                                            7. Sql Server数据库之触发器

                                                                                                                                                                              阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念:   触发器(trigger)是SQL server 提供给程序员和数据分析 ...

                                                                                                                                                                            8. SQL Server封闭掉 触发器递归

                                                                                                                                                                              SQL Server关闭掉 触发器递归SQL Server  是有一个开关, 可以关闭掉 触发器递归的.EXEC sp_dboption '数据库名字', 'recursive triggers', ...

                                                                                                                                                                            9. SQL Server自动化运维系列——监控性能指标脚本(Power Shell)

                                                                                                                                                                              需求描述 一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控 监控值范围 根据经验,作为DBA一般需 ...

                                                                                                                                                                            随机推荐

                                                                                                                                                                            1. 011 client系列案例

                                                                                                                                                                              一:Client系列 1.说明 clientWidth:不包括边框的可视区的宽 clientHeight:可视区的高,不包括边框 clientLeft:左边框的宽度 clientTop:上面框的宽度 ...

                                                                                                                                                                            2. Python3基础 keyword 查看所有的关键字

                                                                                                                                                                                       Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

                                                                                                                                                                            3. weui 导航悬浮固定

                                                                                                                                                                              <style> .none{display: none} #toolbar { display: flex; justify-content: center; align-items: c ...

                                                                                                                                                                            4. win10网上邻居看不到别的共享电脑怎么样办

                                                                                                                                                                              https://jingyan.baidu.com/article/4853e1e5b714aa1909f72600.html

                                                                                                                                                                            5. k8s记录-etcd集群部署(三)

                                                                                                                                                                              https://blog.csdn.net/fy_long/article/details/86542872 1)程序准备tar xvf etcd-v3.3.11-linux-amd64.tar.gz ...

                                                                                                                                                                            6. Python中利用原始套接字进行网络编程的示例

                                                                                                                                                                              Python中利用原始套接字进行网络编程的示例 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构 ...

                                                                                                                                                                            7. UITableView实现行纵向颜色渐变

                                                                                                                                                                              实现效果如下: 其实实现很简单,开始觉得使用颜色值和tableView的indexPath.row挂钩使用即可 或者使用CAGradientLayer实现渐变 最后使用alpha实现即可.需要注意的是 ...

                                                                                                                                                                            8. 【Leetcode_easy】929. Unique Email Addresses

                                                                                                                                                                              problem 929. Unique Email Addresses solution: class Solution { public: int numUniqueEmails(vector< ...

                                                                                                                                                                            9. 【Leetcode_easy】925. Long Pressed Name

                                                                                                                                                                              problem 925. Long Pressed Name solution1: class Solution { public: bool isLongPressedName(string nam ...

                                                                                                                                                                            10. 【转载】我为什么放弃了 Linux 内核学习?

                                                                                                                                                                              最近学习内核很是心累,碰巧看到这篇文章,有点意思~ 转自http://happypeter.github.io/index.html,以下为原文内容: 我在国内的技术类网站 / 博客上, 时常会看到分 ...