比如我想监视表结构的修改,对字段的类型/大小以及增加字段/删除字段做监视,
如何获取监视的信息?
我本来想在 syscolumns 上加触发器,
但建触发器时提示 “拒绝了对对象 'syscolumns'(数据库 'DocSystem',所有者 'dbo')的 CREATE TRIGGER 权限”
该如何操作?
------解决方案--------------------
syscolumns 是系统视图,不能改的。
给个DDL触发器的语句你自己改。08版本的。用来监控整个库上对ddl操作的记录。需要写入另外一个库的表中做记录。记得不要直接抄,改一下:
- SQL code
CREATE TRIGGER [DDLTriggertTrace] ON DATABASE --捕获存储过程、视图、表的创建、修改、删除动作 FOR DDL_DATABASE_LEVEL_EVENTS AS BEGIN SET NOCOUNT ON ; DECLARE @EventData XML = EVENTDATA() ;--返回有关服务器或数据库事件的信息,以XML格式保存。 DECLARE @ip VARCHAR(32) = ( SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID ) ; --记录所有操作到表中 INSERT AuditDB_DBA.dbo.DDLEvents ( EventType , EventDDL , EventXML , DatabaseName , SchemaName , ObjectName , HostName , IPAddress , ProgramName , LoginName ) SELECT @EventData.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)') , @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)') , @EventData , DB_NAME() , @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(255)') , @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)') , HOST_NAME() , @ip , PROGRAM_NAME() , SUSER_SNAME() ; --由于存在作业,DBA操作,导致devuser帐号记录过多,所以删除devuser的数据 DELETE FROM AuditDB_DBA.dbo.DDLEvents WHERE LoginName in ('erpuser','sqlagent'); END