none
AfterInsert Trigger nur für definierte User ausführen RRS feed

  • Frage

  • Hallo,

     

    ich habe eine Tabelle die ein AfterInsert Trigger hat.

    Dieser Trigger soll aber nicht immer ausgeführt werden. Ich habe jedoch nichts gefunden, um der Trigger ansich Rechte zuzuweisen und somit festzulegen ob der Trigger für User A ausgeführt, für User B jedoch nicht ausgeführt wird.

    Derzeit löse ich das Problem mit einem wahrscheinlich eher schlechten Ansatz, indem ich im Trigger  mittels: CURRENT_USER welcher user den Trigger ausführt und und dementsprechend die logigc des Triggers ausführe oder halt nicht.

     

    Kann mir jemand einen gescheiten Lösungsansatz nennen?

     

    Vielen Dank

     

    Chris

    Dienstag, 24. Mai 2011 07:53

Antworten

  • Hallo Chris,

    Für Trigger können keine Rechte festgelegt werden.
    Ssie werden unabhängig von Rechten ausgeführt.

    Wenn Du eine bedingte Ausführung für einzelne Benutzer vorhast,
    so geht das nur durch Abprüfen der Benutzer oder -gruppen.

    Um die Prüfung zu vereinfachen, würde ich eine Rolle erstellen
    und den Benutzern zuordnen und auf diese via IS_MEMBER prüfen.
    So muss man den Trigger nicht ändern, wenn Anwender wechseln.

    Gruß Elmar

    Dienstag, 24. Mai 2011 08:15
    Beantworter
  • Hallo Chris,

    Trigger werden auch ausgeführt, wenn die Änderung durch eine Stored Procedure ausgelöst wurde.
    Und wenn Dein Trigger für Auditing verwendet wird, so würde das auch dann stattfinden.

    Die vorgeschlagene Prüfung via IS_MEMBER könnte man durch IS_SRVROLEMEMBER(N'sysadmin') ersetzen,
    um Server-Administratoren davon auszunehmen.

    Was aber eine hohe Diszplin bei der Nutzung der Server-Anmeldungen voraussetzt.

    Wenn Du nur für besondere Wartungsarbeiten den Trigger deaktivieren willst,
    wäre ein temporäres Deaktivieren über ALTER TABLE via DISABLE TRIGGER sinnvoller.
    Und für den Normalbetrieb die Administratoren als Gleiche zu behandeln.

    Gruß Elmar

     

    Dienstag, 24. Mai 2011 08:41
    Beantworter

Alle Antworten

  • Hallo Chris,

    Für Trigger können keine Rechte festgelegt werden.
    Ssie werden unabhängig von Rechten ausgeführt.

    Wenn Du eine bedingte Ausführung für einzelne Benutzer vorhast,
    so geht das nur durch Abprüfen der Benutzer oder -gruppen.

    Um die Prüfung zu vereinfachen, würde ich eine Rolle erstellen
    und den Benutzern zuordnen und auf diese via IS_MEMBER prüfen.
    So muss man den Trigger nicht ändern, wenn Anwender wechseln.

    Gruß Elmar

    Dienstag, 24. Mai 2011 08:15
    Beantworter
  • hi Chris,

    prinzipiell halte ich es für Falsch einen Trigger aufgrund einer Nutzerunterscheidung zu steuern, da es imho für die Integrität und Logik belanglos ist, wer was macht.

    Es stellt sich die Frage nach dem aktuellen Anwendungsfall.

    In den meisten dieser Fälle ist es besser den Zugriff auf die Tabelle zu unterbinden und über ein Prozedur zu gehen. Oder aber falls wirklich nicht anders möglich, dem Benutzer die Berechtigungen auf der Tabelle entziehen und ihm eine eigen Sicht mit Trigger zu spendieren.

    Also im Grunde niemals auf der Tabelle selber.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 24. Mai 2011 08:15
    Moderator
  • Hallo Chris,

    ein Trigger wird immer ausgeführt, unabhängig vom User und da kann man auch nichts konfigurieren oder über Rechte etc regeln.

    Da ist die beste Lösung am Anfang des Triggers mit Current_User es zu prüfen und wenn für den User keine Aktion erfolgen soll, ein simples RETURN auszuführen; der Trigger endet dann dort.
    Oder das alle Insert Vorgänge nur über eine Stored Procedure ausgeführt werden, die diese Logik gleich umsetzt; direkten Tabellenzugriff sollte man als Best Practice eh nicht so unbedingt zulassen.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Dienstag, 24. Mai 2011 08:15
  • Hallo,

     

    Danke für eure Antworten!

    Es geht konkret und das wegschreiben von Inserts, Updates Deletes auf einer Tabelle (auditing). Als 'Admin' will ich die Tabelle ändern ohne das Auditing ( ohne Trigger Ausführung und Wegschreiben in HistoryTabelle).

     

    Wahrscheinlich ist das 'normale' editieren der Tabelle mittels StoredProcedure am besten und der dann die Rechte geben...

     

    Danke und schönen Tag ...

    Chris

     

    Dienstag, 24. Mai 2011 08:27
  • Hallo Chris,

    Trigger werden auch ausgeführt, wenn die Änderung durch eine Stored Procedure ausgelöst wurde.
    Und wenn Dein Trigger für Auditing verwendet wird, so würde das auch dann stattfinden.

    Die vorgeschlagene Prüfung via IS_MEMBER könnte man durch IS_SRVROLEMEMBER(N'sysadmin') ersetzen,
    um Server-Administratoren davon auszunehmen.

    Was aber eine hohe Diszplin bei der Nutzung der Server-Anmeldungen voraussetzt.

    Wenn Du nur für besondere Wartungsarbeiten den Trigger deaktivieren willst,
    wäre ein temporäres Deaktivieren über ALTER TABLE via DISABLE TRIGGER sinnvoller.
    Und für den Normalbetrieb die Administratoren als Gleiche zu behandeln.

    Gruß Elmar

     

    Dienstag, 24. Mai 2011 08:41
    Beantworter
  • Hi,

     

    ja sicher du hast recht mit der StoredProc!

     

    ok dann werd ich's wohl mit der IS_MEMBER  Prüfung lösen.

     

    Danke

     

    Chris

    Dienstag, 24. Mai 2011 10:31