none
Trigger wer hat ihn ausgelöst RRS feed

  • Frage

  • hallo an alle, 

    ich habe einen Update Trigger geschrieben. Dieser Funktioniert auch sehr gut bisher. Nun würde ich aber gern noch wissen wollen welcher Windowsaccount diesen ausgelöst hat. 

    Geht dies? 

    Wenn ja wie könnte man dies umsetzen?

    Dienstag, 26. November 2019 14:05

Antworten

  • Hi,

    ich verstehe das Problem nicht so wirklich. Der Trigger wird ja nicht durch das SSMS, sondern durch ein DML Statement (INSERT, UPDATE, DELETE) ausgelöst. Das kann durch irgendwas im SSMS sein, das kann aber natürlich auch durch irgendeine andere Anwendung, ein Skript, ... ausgelöst werden.

    Die (oben verlinkte) Beschreibung zu SUSER_SNAME ist doch eigentlich recht aussagekräftig.

    Was genau soll denn deiner Meinung nach nicht funktionieren?

    Im Trigger schreibst Du bspw.

    INSERT INTO Log
    (
        TableName, Action, UserName, Timestamp
    )
    SELECT 'Tabelle1', 'UPDATE', SUSER_SNAME(), GETDATE()

    Und damit wird dann in der entsprechenden Tabelle der Benutzer protokolliert, der das DML Statement ausgeführt hat.



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 26. November 2019 22:22
    Moderator

Alle Antworten

  • Hi,

    SELECT ..., SUSER_SNAME() wäre wohl das, was Du suchst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Dienstag, 26. November 2019 14:20
    Moderator
  • Hallo Stefan,

    die Idee klingt gut. Jedoch sehe ich doch nur immer den der im SSMS den Trigger auslöst oder? Oder anders gesagt woher weiß der Server das genau diese Transaktion des Triggers genau jenen User zuzuordnen ist. Müsste es nicht dann ein Select * SUSER_SNAME() where id = 4711 oder so in der Art sein?  

    Dienstag, 26. November 2019 17:29
  • Nun ja, wenn SSMS nun mal unter diesem User läuft oder eine SP aufruft, die den User temporär überschreibt um höhere Rechte zu bekommen?
    Dann müsste die SP den aufrufenden User protokollieren.
    Dienstag, 26. November 2019 21:05
  • Hi,

    ich verstehe das Problem nicht so wirklich. Der Trigger wird ja nicht durch das SSMS, sondern durch ein DML Statement (INSERT, UPDATE, DELETE) ausgelöst. Das kann durch irgendwas im SSMS sein, das kann aber natürlich auch durch irgendeine andere Anwendung, ein Skript, ... ausgelöst werden.

    Die (oben verlinkte) Beschreibung zu SUSER_SNAME ist doch eigentlich recht aussagekräftig.

    Was genau soll denn deiner Meinung nach nicht funktionieren?

    Im Trigger schreibst Du bspw.

    INSERT INTO Log
    (
        TableName, Action, UserName, Timestamp
    )
    SELECT 'Tabelle1', 'UPDATE', SUSER_SNAME(), GETDATE()

    Und damit wird dann in der entsprechenden Tabelle der Benutzer protokolliert, der das DML Statement ausgeführt hat.



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 26. November 2019 22:22
    Moderator
  • Vielen Dank Stefan, 

    das hat mir noch zum Verständnis gefehlt! Ich habe es gerade mit verschiedenen Usern getestet und es funktioniert sehr gut! 

    Mittwoch, 27. November 2019 13:12