Občas se zkrátka a dobře nedá vždy zabránit tomu, že přijde seshora příkaz, aby ten a ten dostal admin práva na produkci. Jako správný paranoidní DBA to ale nenecháte jen tak a pojistíte si alespoň ten nejhorší možný scénář: že se vetřelec, ať už omylem nebo úmyslně, pokusí smazat jednu nebo více klíčových produkčních databází.
Jak na to? Jednoduše pomocí DDL triggeru na úrovni serveru, ve kterém odchytíme událost DROP_DATABASE a po vypsání informační zprávy provedeme ROLLBACK operace:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TRIGGER [trg_DDL_DropDatabasePreventer] ON ALL SERVER FOR DROP_DATABASE AS BEGIN DECLARE @DbName varchar(128) SELECT @DbName = EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)') IF @DbName IN ('ProdDB') BEGIN PRINT 'Production database ' + @DbName + ' cannot be dropped!' PRINT 'Run >> DISABLE TRIGGER trg_DDL_DropDatabasePreventer ON ALL SERVER << first.' PRINT 'Reenable!!! the trigger with >> ENABLE TRIGGER trg_DDL_DropDatabasePreventer ON ALL SERVER <<' IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION END END GO ENABLE TRIGGER [trg_DDL_DropDatabasePreventer] ON ALL SERVER GO
Záleží jen na Vaší fantazii, jak peprná ona informační zpráva bude a zda tam třeba ještě pro větší zábavu nepřihodíte volání sp_send_dbmail na nadřízeného;)