mssql sqlserver DDL(数据库)触发器应用举例


摘要:
下文将展示几个数据库触发器的应用例子


例: 禁止未授权用户 新增表和修改表结构 及新增、修改、删除索引的权限

  ----禁止指定用户创建 修改 删除表及索引的数据库触发器
 CREATE TRIGGER [tr_stop_addTableAndUpdataTableInfo] ON DATABASE
 FOR ALTER_TABLE,DROP_TABLE, CREATE_TABLE,
     CREATE_INDEX,ALTER_INDEX, DROP_INDEX  
AS
DECLARE @dataInfo AS XML;
SELECT @dataInfo = EVENTDATA();
IF @dataInfo.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(100)') NOT IN (
 'sa','windowsSuperAdmin'
) 
  BEGIN
   --RAISERROR ('当前用户无“建表、修改、删除表和索引权限”,请联系管理员!', 16, 1)     
   ROLLBACK
  END

GO 
ENABLE TRIGGER [tr_stop_addTableAndUpdataTableInfo] ON DATABASE  ---开启数据库触发器
GO
  
  DISABLE TRIGGER ALL ON DATABASE  ----禁用数据库中的DDL触发器
  ENABLE Trigger ALL ON DATABASE;  ----开启数据库中的DDL触发器
   go
  select * from sys.server_triggers   ---获取所有DDL(数据库)触发器