Trigger sind seitens Performance vermutlich die schlechteste Wahl. Worüber wir allerdings hier sprechen hat nichts mit den üblichen Insert, Update und Delete Trigger zu tun.  Wir wollen aktive Login Versuche überwachen und evtl darauf reagieren.

Das einzig Gemeinsame mit den Üblichen DML Triggern ist also das Reagieren auf Ereignisse – den Logins.

Ein Frage der Zeit

Wissenswert ist hier, dass Logon Trigger erst nach der Authentifizierung stattfinden, aber bevor eine Benutzersitzung zugewiesen wird. Daher werden auch alle Fehlermeldung, die evtl durch den Trigger ausgelöst werden in das SQL Server Fehlerprotokoll geschrieben Ist das Login grundsätzlich falsch (falsches Kennwort oder ähnliches), dann wird der Logon Trigger gar nicht erst ausgelöst.

Zweckdienliche Hinweise erbeten

Insofern läßt sich der Zweck der Logon Trigger gut vorstellen. So könnte man beispielsweise die Uhrzeiten abfragen und je nachdem eine Login zulassen oder eben auch das Login verwerfen (Rollback). Oder etwa pro User maximal 3 Sessions oder grundsätzlich eine maximale Anzahl an Sessions generell zulassen. Der Phantasie sind hier keine Grenzen gesetzt.

Beachte allerdings hierbei, dass der Trigger im Namen des User ausgeführt wird. Insofern muss, falls  die Anzahl der Sessions ausgelesen werden sollte, das Recht für View State für den User vorhanden sein oder alternativ läßt man den Trigger unter einem bestimmten Useraccount ausführen.  (execute as ‘’)

 

Maximal 30 Session, außer für den Administrator

 

1 Create Trigger MaxSessions 2 ON ALL SERVER WITH EXECUTE AS 'FBIAdministrator' 3 FOR LOGON 4 AS 5 BEGIN 6 If ((select count(*) from sys.dm_exec_connections 7 ALTER TRIGGER trgMaxSessions 8 where session_id>50) > 30 9 AND 10 (ORIGINAL_LOGIN() != 'FBIAdministrator')) 11 ROLLBACK; 12 END;

 

 

Nur  3 Sessions pro User , außer für den Administrator

 

1 ALTER TRIGGER trgMaxSessions 2 ON ALL SERVER WITH EXECUTE AS 'FBIAdministrator' 3 FOR LOGON 4 AS 5 BEGIN 6 If ((select count(*) from sys.dm_exec_sessions where original_login_name= ORIGINAL_LOGIN()) > 3 7 AND 8 (ORIGINAL_LOGIN() != 'FBIAdministrator')) 9 ROLLBACK; 10 END;

 

 

Für bestimmte Anwendungen Zeiten vorgeben

 

1 create TRIGGER BusinessTime 2 ON ALL SERVER WITH EXECUTE AS 'FBIAdministrator' 3 FOR LOGON 4 AS 5 BEGIN 6 IF (substring(convert(varchar(50),Current_timestamp),12,23)) 7 not between ' 06:00PM' and ' 06:00AM' 8 AND 9 (app_name() like '%Report%') 10 ROLLBACK; 11 END;

 

 

Protokollierung der Logins

 

1 Create TRIGGER LoginMonitor 2 ON ALL SERVER WITH EXECUTE AS 'FBIAdministrator' 3 FOR LOGON 4 AS 5 BEGIN 6 INSERT INTO DWMontor..Logininfos (Orgname, Datum, Info) 7 SELECT ORIGINAL_LOGIN(), GETDATE(), 8 EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]','NVARCHAR(128)') 9 END; 10 11 --Tabelle für Loginprotokollierung 12 13 CREATE TABLE [dbo].[LoginInfos]( 14 [id] [int] IDENTITY(1,1) NOT NULL, 15 [Orgname] [varchar](50) NULL, 16 [Datum] [datetime] NULL, 17 [Info] [varchar](100) NULL 18 ) 19

 

Wie bereits gesagt. Der Fantasie sind keine grenzen gesetzt, ob noch eine Emailbenachrichtigung zusenden lassen oder was auch immer. Aüßerst praktisch!

Viel Spaß damit!

Fumus

Share
Published by
Fumus

Recent Posts

SQL Server 2019 – static data masking – Du Opfer!

In SQL Server 2016 wurde das sog. dynamic data masking eingeführt. Eine Möglichkeit Daten bei…

5 Jahren ago

MinRole – Oder wie alles etwas einfacher wird

Seit Sharepoint Server 2007 präsentiert sich die Installation immer auf die gleiche Weise. Gerade mal,…

8 Jahren ago

Schritt für Schritt: SQL 2016 – Dynamic Data Masking

Es weihnachtet! Gerade bekam ich von einer Kollegin Plätzchen angeboten mit der Größe eines Diskus…

8 Jahren ago

Schritt für Schritt: SQL Server 2016 – temporal tables

Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables…

9 Jahren ago

SQL Server 2016 Schritt für Schritt–Installation und First Look

SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde? Wollen wir…

9 Jahren ago

SQL Server 2016 – CTP2

Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server…

9 Jahren ago