zoukankan      html  css  js  c++  java
  • 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 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;

  • 相关阅读:
    Javascript的IE和Firefox兼容性汇编(转)
    JSP里request变量列表
    C#中的接口(转)
    寒羽对帝国的理解(通向高手之路)(转)
    怎样获得Sqlserver 2000得实例列表和运行在一个实例上得数据库列表(转)
    jsp文件上传的处理(转)
    用户不上你的网站的50个原因
    慈勤强的JFolder1.0版代码(JSP)
    管理常用SQL语句
    .net 取得访问的url
  • 原文地址:https://www.cnblogs.com/zping/p/5394247.html
Copyright © 2011-2022 走看看