Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Server 2016: Triggers, Stored Procedures und Funktionen

Logon-Trigger

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Logon-Trigger werden nach der Authentifizierung durch den SQL Server aufgerufen und können Anmeldungen per Code abbrechen. Wenn es hier zu Fehlern kommt, hilft nur noch eine Dedicated Admin Connection (DAC).
04:42

Transkript

Nach den DDL-Triggern zeige ich Ihnen jetzt die Logon-Trigger. Zugegeben die werden relativ selten verwendet, aber Sie haben damit die Möglichkeit entsprechend auf den Login-Prozess Ihres Servers Einfluss zu nehmen. Sie können einen Trigger schreiben, der versorgt, dass sich gewisse User nur so und so häufig anmelden, also nicht mehrfach Verbindungen aufbauen oder nach Uhrzeiten einschränken, was auch immer. Insofern sind dadurch auch die Möglichkeiten gegeben. Nichtsdestotrotz werden die relativ wenig verwendet, aber wichtig ist zu wissen, dass Logon-Trigger nach erfolgreicher Authentifizierung ausgeführt werden. Das heißt, der Server hat zu dem Zeitpunkt den User schon authentifiziert und ich habe damit eigentlich nur noch die Möglichkeit die Anmeldung weiter einzuschränken, indem ich die möglicherweise abbreche. Das heißt, ich habe die Möglichkeit über einen ROLL BACK die entsprechende Verbindung schlicht und ergreifend zu eliminieren. Was natürlich einen interessanten Fall aufwirft, was ich denn mache, wenn der Trigger einen Fehler hat. Wie komme ich dann auf den Server? Als normaler User überhaupt nicht mehr, weil dann ich das Problem habe, dass eine Verbindung, die ich aufbaue, sofort wieder abgebaut wird. Aber als Administrator habe ich die Möglichkeit, die sogenannte Dedicated Admin Connection zu verwenden und das sind spezielle Möglichkeiten, die es einem Admin erlauben auf einem Server zuzugreifen, der ansonsten, sagen wir mal, durch diesen Trigger verkonfiguriert wurde, oder wo entsprechend extremer Ressourcenmangel herrscht. Mit dieser Verbindung kann ich dann hingehen und entsprechend, die Logon-Trigger oder den Logon-Trigger, es wird in der Regel nur einer sein, dann ausschalten oder löschen. Logon-Trigger werden auch auf Serverebene definiert, deshalb kann ich hier unter [sys] [server_triggers] schauen, ob es den gibt und gegebenenfalls löschen, das dürfte jetzt eine Nullnummer sein. Ich sehe es hier auf dem Server noch nicht. Dann kann ich den Trigger anlegen mit CREATE TRIGGER, den Namen und ALL SERVER FOR LOGON. Wenn ich zum Beispiel wie hier vergessen habe den Code einzukommentieren und nur einen ROLL BACK hier drin stehen habe, habe ich schon so ein Problem. Ich könnte auch eine Art von Fehlerszenario haben, die in dem Trigger auftritt und dann alle weiteren Verbindungen unterbinden wird zu diesem Server. Das heißt, wenn ich diesen Trigger anlege, passiert erstmal augenscheinlich nicht besonders viel. Ich kann den Server öffnen, ich kann hier schauen, ob es den Trigger gibt, in der Tat gibt es den Trigger, alles sieht für mich gut aus. Wenn ich jetzt aber versuche eine neue Verbindung zum Server aufzumachen, indem ich zum Beispiel hier ein Fenster öffne, bekomme ich eine Meldung, die sagt: Fehler beim Anmelden für den Anmledenamen so und so wegen Triggerausfühurung. An der Stelle hoffe ich für Sie, dass Sie sich mit Ihrem Admin gut gestellt haben, weil der kann sich trotzdem noch mit dem Server verbinden und den Trigger dabei umgehen. Ich habe hier eine Eingabeaufforderung geöffnet und ich kann sqlcmd angeben mit Parameter A für eine dedizierte Admin-Verbindung. Jetzt gibt es zwei Möglichkeiten: Wenn Sie wissen, wie der Trigger heißt, können Sie den Namen gleich verwenden, ansonsten können Sie zum Beispiel SELECT * FROM sys.server.triggers verwenden und ausgeführt wird das Ganze mit go. Sie bekommen dann die komplette Tabelle. Es nicht besonders lesbar, aber ich kann das Ganze ein bisschen einschränken, dass ich weiß, die Spalte, die mich interessiert, heißt Name. Ansonsten müsste ich hier rumgucken um zu sehen, wo ich den Namen hier finde. In der Tat ist er auch da, aber ich führe das Ganze nochmal nur mit SELECT name FROM sys.server_triggers aus. Dann bekomme ich genau dieses Ergebnis und hier kann ich hingehen und sagen drop trigger logon_trigger on all server. Ich kann das mit go ausführen und meine Welt ist wieder in Ordnung. Punkt 1, es sollte so sein, dass ich hier den Logon-Trigger nicht mehr wiederfinde. Punkt 2, viel wichtiger, ich kann eine neue Verbindung aufbauen, ohne dass es zu einer Fehlermeldung kommt. Das heißt, so können Sie sich dann auf den Logon-Trigger entledigen, die irgendwie fehlerhaft laufen. Sie müssen aber dafür Admin- Rechte auf der Maschine haben und Sie müssen die Verbindung auch als dedizierte Admin- Verbindung geöffnet haben. In der Regel weiß der Admin, was er zu tun hat. Sie sollten das aber nicht überreizen. Wenn es dreimal am Tag passiert, könnte es sein, dass er ein bisschen ungehalten reagiert.

SQL Server 2016: Triggers, Stored Procedures und Funktionen

Nutzen Sie in SQL Server Trigger, gespeicherte Prozeduren, Late Binding, Fehlerbehandlung sowie Scalar- und Tabellenwertfunktionen.

3 Std. 12 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:08.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!