Bu yazımızda sql server üzerinde logon trigger oluşturarak bazı işlemlere örnekler yapalım. Bir kullanıcının girişte hata alıp login olamaması, ya da hata almadan bir tabloya girişini loglatmak, ya da mail attırarak bilgi almak gibi. Logon triggerı çok ihtiyaç olmadıkça kullanmanızı tavsiye etmem. Önce loglatmak için tablo oluşturalım, sonra triggerı create edelim.
USE [LoginInfoDB]
GO
CREATE TABLE [dbo].[logon_trigger_data](
[date_time] [datetime] NULL,
[ClientHost] [varchar](50) NULL,
[LoginName] [varchar](50) NULL,
[LoginType] [varchar](50) NULL,
[EventData] [xml] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
select * from [LoginInfoDB].[dbo].[logon_trigger_data]
Şimdide serverside logon triggerımızı oluşturalım. muhasebe kullanıcısı login olduğunda hata alsın.
USE [master] GO CREATE TRIGGER [logon_ddl_trg] ON ALL SERVER WITH EXECUTE AS 'sa' FOR LOGON AS BEGIN declare @EventData xml,@PostTime datetime,@LoginName varchar(50), @ClientHost varchar(50),@LoginType varchar(50) BEGIN set @EventData = eventdata() set @PostTime = @EventData.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime') set @LoginName = @EventData.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(50)') set @ClientHost = @EventData.value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(50)') set @LoginType = @EventData.value('(/EVENT_INSTANCE/LoginType)[1]', 'varchar(50)') IF @LoginName='muhasebe' /* seçenek 1 hata verdirip login olmasını engellemek için.. */ raiserror('Custom Error',25,16) /* seçenek 2 tabloya loglatmak için */ insert into [LoginInfoDB].[dbo].[logon_trigger_data] values (getdate(),@ClientHost,@LoginName,@LoginType,@EventData) /* seçenek 3 mail attırmak için */ EXEC msdb.dbo.sp_send_dbmail @profile_name = 'SMTP', @recipients = 'omer@omeracar.com.tr', @subject = 'USer Login Bilgi', @body = 'Muhasebe kullanicisi login oldu.', @body_format = 'HTML'; END END
Logon triggerı disable etmek ya da drop etmek için aşağıdaki komutları kullanabiliriz.
select * from [LoginInfoDB].[dbo].[logon_trigger_data] -- Serverside triggerlerı listelemek SELECT * FROM sys.server_triggers; -- Login triggerı disable etmek DISABLE TRIGGER [logon_ddl_trg] ON ALL SERVER; -- Login triggerı drop etmek DROP TRIGGER [logon_ddl_trg] ON ALL SERVER;