Jump to content

MS SQL Server Version: 15.0.2000.5 LOGON Trigger mit globaler Variable @@OPTIONS und @@CONNECTIONS falscher Wert für die Optionen


Empfohlene Beiträge

Hallo liebe Gemeinde,

ich bin ein bisschen verzweifelt und evtl. hat jemand einen Tip was ich falsch mache.

Motivation:

Es soll ein LOGON Trigger geschrieben werden der neben Informationen zu Connects, Host, User u.s.w. auch die voreingestellten Optionen berichten soll.

Das klappt auch alles, bis auf den Wert für die ausgelesene Umgebungsvariable @@OPTIONS.

Diesen Wert brauche ich, um festzustellen, wie der Wert für IMPLICIT_TRANSACTION beim logon gesetzt ist und möchte den Wert dann auflösen.

Da ich Neuling bin im MS SQL Server Umfeld bin, könnte es natürlich sein, dass das gar nicht geht und mein Ansatz falsch ist.

Was habe ich gemacht:

---------------------------------------
-- TEST
---------------------------------------
/* Creates db for storing audit data */
CREATE DATABASE logonaudit
go

/* use the db */
USE logonaudit
go

/* Creates table for logons inside db */
CREATE TABLE logonauditings
(
    A_CONNECTIONS int,
    A_OPTIONS int,
    A_IMPLICIT_TRANSACTION varchar(32)
)
GO

/* creates the trigger */
CREATE or alter TRIGGER logonauditingtrigger
 ON ALL SERVER FOR LOGON
AS
begin
declare
 @A_CONNECTIONS           int,
 @A_OPTIONS               int,
 @A_IMPLICIT_TRANSACTION  varchar(32) = 'Hier steht entw. ON o. OFF'
 
 set @A_OPTIONS = @@OPTIONS;

 /* diese Interpretation geht schief da der INT Wert nicht korrekt scheint */
 if ((@A_OPTIONS & 2) = 0)  
     set @A_IMPLICIT_TRANSACTION = 'Implicit Transactions are OFF'
 ELSE
     set @A_IMPLICIT_TRANSACTION = 'Implicit Transactions are ON';

INSERT INTO logonaudit.dbo.logonauditings
(
A_CONNECTIONS,
A_OPTIONS,
A_IMPLICIT_TRANSACTION
)
values
(
 @@CONNECTIONS,
 @@OPTIONS,
 @A_IMPLICIT_TRANSACTION
)
end
go

COMMIT;


/* manuelle Analyse wenn man die Option umschaltet für implicit_transactions */

-- ON
set implicit_transactions ON;

select  @@OPTIONS --> Ergebnis: 5498

-- OFF
set implicit_transactions OFF;

select  @@OPTIONS --> Ergebnis: 5496

/* Nach dem neuen login in die datenbank audit tabelle abfragen also was wurde während des login geschrieben */
select *
from logonaudit.dbo.logonauditings
;

/* in der audit tabelle steht dann der Wert */

A_CONNECTIONS    A_OPTIONS    A_IMPLICIT_TRANSACTION
1975                             22328        Implicit Transactions are ON

/* clean up */
truncate table logonaudit.dbo.logonauditings

;


Also im Wesentlichen geht es um die Frage:
---------------------------------------------------

Warum wird bei manueller Abfrage der Variablen @@OPTIONS ein Wert 5496 oder 5498 angezeigt und wenn das über den Trigger läuft der Wert 22328.
Das scheint das Vier-Fache zu sein, erschließt sich mir aber nicht wirklich.

Bei der Anzahl der Connections ist ein Unterschied von nur 2 oder ähnlich.

 

Ich würde mich sehr über Tips feuen.

 

Herzliche Grüße

 

F.

 

Link zu diesem Kommentar

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...