SQL Server数据库级别触发器

摘要:
禁止修改表结构并添加表CREATETRIGGER[Object_Change_Trigger_DDL]ONDATABASEFORALTER_table、DROP_table,CREATE_table和CREATE_INDEX,DROP_INDEXASDECLARE@EventDataASXML ; SELECT@EventData=事件数据();IF@EventData

  禁止修改表结构和加表

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 AUTHORITYSYSTEM'
,'NT SERVICEMSSQLSERVER'
,'WIN-6RNHUPNK4OJAdministrator'
,'NT SERVICESQLSERVERAGENT'
,'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数据库级别触发器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一步一步实现iOS应用PUSH功能css控制两个表格的边线重合下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

彩虹表(rainbow table)

前记 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法); 特点是不可逆的,一般解密不了;那有没有想过,为什么各种工具网站都可以进行MD5解密呢?https://www.sojson.com/encrypt_md5.html 彩虹表,了解一下。 1. 如何存储密码才是安全的? 密码存储有几种方式: 直接...

.NET 百万级 大数据插入、更新 ,支持多种数据库

功能介绍 (需要版本5.0.45) 大数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现 当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API 操作数据库达到极限性能 功能用法 BulkCopy性能远强于现有市场的 ORM框架,比 EFCore Efcore.Bulkextension快30% BulkUpdat...

ABP官方文档翻译 3.8 数据过滤器

数据过滤器 介绍 预定义过滤器 ISoftDelete 何时使用? IMustHaveTenant 何时使用? IMayHaveTenant 何时使用 禁用过滤器 关于using语句 关于多租户 全局禁用过滤器 启用过滤器 设置过滤器参数SetTenantId方法 ORM集成 Entity Framework EntityFramewo...

DB2存储过程——参数详解

语法说明1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数     IN:输入参数OUT:输出参数INOUT:作为输入输出参数parameter...

XML导入Access/MySql数据库 XML2OleDb Fred

学校XML课程布置了一个作业“XML导入Access和MySql”,我在网上找到了孟子E章的Xml2OleDb,功能很全面,唯一的不足就是缺少了导入MySql的支持,经过我的完善,补充了该功能。 我的版本是为了交作业,所以去掉了连接字符串自输入,而是固定在web.config里啦。导入MySql的代码与2OleDb有所不同,思路是一样的,下面我贴出来2My...

mongodb分片认证

启动configsvr 1. 确保mongdb的configsvr是采用service模式启动的,即从/etc/init.d下的脚本启动的,其用户是mongod。 2. 确保mongod的配置文件完全相同。 3. 确保整个集群的所有keyFile文件内容相同。 启动mongos 1. 使用以下命令启动,以确保用户切换为mongod: runuser -s...