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;

  • 相关阅读:
    element-ui做表单验证 v-for遍历表单 自动生成校验规则 pc移动双适配
    element-ui练习使用总结
    js监听页面标签切换
    对象数组,按照没想中特定的属性(按中文拼音)排序
    调用七牛云存储文件,返回url
    javascript中的class类 以及class的继承
    javascript原型继承
    javascript面向对象 用new创建一个基于原型的javascript对象
    java中的变量和数据类型
    css的伪元素
  • 原文地址:https://www.cnblogs.com/zping/p/5394247.html
Copyright © 2011-2022 走看看