tutorial-db
Grünschnabel
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:
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
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:
SQL:
---------------------------------------
-- 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