SQL Server数据库级别触发器
禁止修改表结构和加表
CREATE TRIGGER [Object_Change_Trigger_DDL] ON DATABASE
FOR ALTER_TABLE,DROP_TABLE,CREATE_TABLE,CREATE_INDEX,ALTER_INDEX, DROP_INDEX
AS
DECLARE @EventData AS XML;
SELECT @EventData = EVENTDATA();
IF @EventData.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(150)') NOT IN (
'uws_M_ApricotMDM_dev'
,'Us_wangdan_temp'
,'NT AUTHORITY\SYSTEM'
,'NT SERVICE\MSSQLSERVER'
,'WIN-6RNHUPNK4OJ\Administrator'
,'NT SERVICE\SQLSERVERAGENT'
,'bl_un'
)
BEGIN
--RAISERROR ('创建,修改,删除表的权限已收回,如有问题请联系DBA!', 16, 1)
ROLLBACK
END GO
ENABLE TRIGGER [Object_Change_Trigger_DDL] ON DATABASE
GO
CREATE TABLE [dbo].[DDLMonitor](
[ID] [INT] IDENTITY(1,1) NOT NULL,
[SPID] [INT] NULL,
[ServerName] [VARCHAR](150) NULL,
[PostTime] [DATETIME] NULL,
[EventType] [VARCHAR](300) NULL,
[LoginName] [VARCHAR](150) NULL,
[UserName] [VARCHAR](100) NULL,
[SchemaName] [VARCHAR](100) NULL,
[DatabaseName] [VARCHAR](100) NULL,
[ObjectName] [VARCHAR](100) NULL,
[ObjectType] [VARCHAR](100) NULL,
[TSQLCommand] [VARCHAR](MAX) NULL,
[EventData] [XML] NULL,
[createdate] [DATETIME] NULL DEFAULT (GETDATE()),
CONSTRAINT [PK_DDLMonitor] PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
--记录加的表和字段
CREATE TRIGGER [trg_DDL_audit] ON DATABASE
FOR ALTER_PROCEDURE,DROP_PROCEDURE,ALTER_FUNCTION,DROP_FUNCTION,ALTER_TABLE,DROP_TABLE,CREATE_TABLE
AS DECLARE @EventData AS XML;
SELECT @EventData = EVENTDATA(); INSERT INTO DDLMonitor.dbo.DDLMonitor(
SPID,
ServerName,
PostTime,
EventType,
LoginName,
UserName,
SchemaName,
DatabaseName,
ObjectName,
ObjectType,
TSQLCommand,
[EventData]
)
VALUES(
@EventData.value('(/EVENT_INSTANCE/SPID)[1]','int'),
@EventData.value('(/EVENT_INSTANCE/ServerName)[1]','varchar(50)'),
@EventData.value('(/EVENT_INSTANCE/PostTime)[1]','datetime'),
@EventData.value('(/EVENT_INSTANCE/EventType)[1]','varchar(100)'),
@EventData.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(150)'),
@EventData.value('(/EVENT_INSTANCE/UserName)[1]','varchar(100)'),
@EventData.value('(/EVENT_INSTANCE/SchemaName)[1]','varchar(100)'),
@EventData.value('(/EVENT_INSTANCE/DatabaseName)[1]','varchar(100)'),
@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]','varchar(100)'),
@EventData.value('(/EVENT_INSTANCE/ObjectType)[1]','varchar(100)'),
@EventData.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','varchar(max)'),
@EventData
)
GO ENABLE TRIGGER [trg_DDL_audit] ON DATABASE
GO
--禁用当前数据库中所有数据库级别的 DDL 触发器:
DISABLE TRIGGER ALL ON DATABASE
--禁用服务器实例中所有服务器级别的 DDL 触发器:
DISABLE TRIGGER ALL ON ALL SERVER
SELECT * FROM sys.server_triggers
ENABLE Trigger ALL ON ALL SERVER;
SQL Server数据库级别触发器的更多相关文章
- SQL Server 数据库DML触发器 【一】
今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内 ...
- Sql Server数据库之触发器
阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念: 触发器(trigger)是SQL server 提供给程序员和数据分析 ...
- Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新
需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...
- 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)
原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...
- SQL Server 数据库的维护(二)__触发器
--维护数据库-- --触发器-- --概述: 触发器是一种特殊类型的存储过程,用来强制执行业务规则.在调用执上,触发器不能像存储过程那样可以由用户通过T-SQL语句直接调用,而是需要有数据库所发生的 ...
- SQL Server数据库的兼容级别
SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行M ...
- 我的SQL SERVER数据库会装满吗?
概述 今天有个客户问我一个蛮有意思的问题.我使用的SQL SERVER 2008数据库,目前数据库130多G,其中某个表的记录条数就有3亿1千多万,占用了50多G.那SQL SERVER 数据库中的表 ...
- 轻松学SQL Server数据库
轻松学SQL Server数据库pdf 下载地址:网盘下载 目录: 第1章 数据库与SQL Server 2008 11.1 数据库基础 21.1.1 数据库的概念 21.1.2 数据库模型 2 ...
- SQL server 数据库用户表名称
转自(http://blog.163.com/jlj_sk/blog/static/22579293200861422833924/) 取得SQL server 数据库中 所有用户表名称 select ...
随机推荐
- Java面试宝典答案详解与感悟(第一天)
一.Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".java&quo ...
- SQL数据库 开启时出现 数据库连接错误2,error:40的问题。如何解决
错误如下:(原因是sql server服务停止) 解决这个问题,就需要启动sql server服务:主要有三种方法: 一.(后台启动服务) 1.开始->控制面板: 2.管理工具 3.服务 4.把 ...
- Python第一模块
一.Python简介 二.Python种类 三.Python环境 windows: 1.需要配置环境变量 2.更新:卸载重装 linux:1.常用命令: 查看默认Python版本 Python -V ...
- libpng安装与配置(Win7+VS2010)
一.下载 libpng:http://libmng.com/pub/png/libpng.html zlib:http://www.zlib.net/ IDE:VS2010 二.编译 将下载的两个zi ...
- python 继承中的super
python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...
- Centos实现回收站机制
作为一个运维人员,在服务器上删除文件时为了方便经常会直接使用rm *.txt这类通配符,甚至为了省事加-rf参数,如果是确定的话还好,要是在删除的时候一个不留神,那事可就大了. 俗话说常在河边站哪有不 ...
- 【译】RabbitMQ:发布-订阅(Publish/Subscribe)
在前一篇教程中,我们创建了一个工作队列,我们假设在工作队列后的每一个任务都只被调度给一个消费者.在这一部分,我们将做一些完全不一样的事情,调度同一条消息给多个消费者,也就是有名的“发布-订阅”模式.为 ...
- python autopep8
安装 使用pip install autopep8或easy_install 都可以. 使用 autopep8 -i -a 要检查的py文件路径 更多参数使用可以参考:https://github.c ...
- VS2010+C#+AutoCAD2008时断点调试功能无效的处理方法
把acad.exe.config文件修改为:------------------------------------------------------------------------------ ...
- 1.jenkins持续集成-jenkins安装
1.为什们要使用jenkins Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目; 2.监控外部调用执行的工作. 2.安装jen ...