RT,谢谢

解决方案 »

  1.   

    我要水分才行。那我就把我珍藏多年的脚本拿出来了。
    /**
    1、不允许删除、修改表格
    **/
    CREATE TRIGGER reminder
    ON DATABASE
    FOR CREATE_TABLE 
    AS
       
       DECLARE @data XML = EVENTDATA()
       DECLARE @str NVARCHAR(150)
       SET @str=suser_sname() +N' 通过 '+APP_NAME()   
       +N' 在 '+convert(varchar(20), getdate(),120) +N' ,创建了 '''
       +CONVERT(sysname,@data.query('data(//ObjectName)'))+''''
       RAISERROR(@str,10,1) WITH LOG
    GO
    --建表测试
    if OBJECT_ID('test') is not null
    drop table test
    go 
    create table test (id int identity(1,1) primary key , name varchar(200))
    go--删除触发器
    DISABLE TRIGGER [reminder] ON DATABASE
    DROP TRIGGER [reminder] ON DATABASE
    GO
    --删除表格测试
    drop table test
    go
    /**
    2、不允许删除、修改表格
    **/
    CREATE TRIGGER safety 
    ON DATABASE 
    FOR DROP_TABLE, ALTER_TABLE 
    AS 
       PRINT N'不允许删除表格-safety!!!!' 
       ROLLBACK
    GO--删除表格测试
    drop table test
    go
    --删除触发器
    drop TRIGGER safety on database
    go
    /**
    3、tblDdlLog 监控系统增删查改情况
    **/--创建日志表
    CREATE TABLE tblDdlLog (
    LogId int identity(1,1) primary key,
    PostTime datetime2(3) DEFAULT(SYSDATETIME()),
    AppName varchar(50),
    LoginName nvarchar(100),
    DB_User nvarchar(100),Object sysname, 
    Event nvarchar(100), 
    TSQL nvarchar(2000),
    EventData XML);
    GO--创建触发器
    CREATE TRIGGER log 
    ON DATABASE 
    FOR DDL_DATABASE_LEVEL_EVENTS 
    AS
    DECLARE @data XML = EVENTDATA()
    INSERT tblDdlLog 
       (AppName,LoginName, DB_User, Object, Event, TSQL, EventData) 
       VALUES 
       (APP_NAME(),
       CONVERT(nvarchar(100), @data.query('data(//LoginName)')),
       CONVERT(nvarchar(100), CURRENT_USER), 
       CONVERT(sysname,@data.query('data(//ObjectName)')), 
       CONVERT(nvarchar(100), @data.query('data(//EventType)')),
       --CONVERT(nvarchar(2000), @data.query('data(//TSQLCommand)')),
       CONVERT(nvarchar(2000), @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(2000)')),
    @data) ;
    GO--测试语句
    CREATE TABLE TestTable (a int)
    ALTER TABLE TestTable Add b nvarchar(10)
    DROP TABLE TestTable
    GO
    --查看测试结果
    SELECT * FROM tblDdlLog   
    --删除触发器
    DROP TRIGGER  log ON DATABASE
    --删除表格
    TRUNCATE TABLE tblDdlLog
    DROP TABLE tblDdlLog