• 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
  • 相关阅读:
    在Android中使用Handler和Thread线程
    getCacheDir用法
    OAuth协议
    android开发参考网站
    常用的地址
    LayoutInflater获取方式
    java for map
    ubuntu12.04+nginx+apc
    ubuntu12.04 + dropbox
    yii + 获取 control + action
  • 原文地址:https://www.cnblogs.com/champaign/p/mssql-db-trigger.html
Copyright © 2020-2023  润新知