Fügen Sie Trigger ein, um vertrauliche Informationen zu entfernen

7

Ein Anbietersystem (dh außerhalb meiner Kontrolle) fügt eine Zeile in eine Tabelle in eine Datenbank ein, die ich kontrolliere. Eine Spalte in dieser Einfügung enthält vertrauliche Informationen, die ich nicht in meiner Datenbank haben möchte.

Wenn ich INSTEAD OF INSERTdiese Spalte mit einem Auslöser ausblende, werden die vertraulichen Informationen dann weiterhin im Transaktionsprotokoll angezeigt?

dmc
quelle
1
Wer liest das Transaktionsprotokoll?
Aaron Bertrand
1
Hoffentlich niemand. Aber ich werde besser schlafen, wenn ich weiß, dass diese vertraulichen Informationen nirgendwo gespeichert werden (ob im Protokoll oder in einer Protokollsicherung).
dmc

Antworten:

7

Ja, dies verhindert, dass die Informationen im Protokoll angezeigt werden. Das Transaktionsprotokoll muss nur genügend Informationen aufzeichnen, um die Zeile wiederherzustellen, die tatsächlich auf die Datenseite geschrieben wurde. Sie können dies anhand sys.fn_dblogder folgenden Informationen sehen.

CREATE TABLE dbo.T
  (
     X      int CONSTRAINT PK PRIMARY KEY,
     String varchar(50) NULL
  )

GO

CHECKPOINT;

INSERT INTO dbo.T
VALUES      (1,
             'Private and Confidential')

/*Without INSTEAD OF trigger this phrase found in log record*/
SELECT CASE
         WHEN [Log Record] LIKE '%Private and Confidential%' THEN 1
         ELSE 0
       END,
       [RowLog Contents 0]
FROM   sys.fn_dblog(NULL, NULL)
WHERE  Operation = 'LOP_INSERT_ROWS'
       AND AllocUnitName = 'dbo.T.PK'

GO

CREATE TRIGGER TR
ON dbo.T
INSTEAD OF INSERT
AS
  BEGIN
      SET NOCOUNT ON;

      INSERT INTO dbo.T
                  (X)
      SELECT X
      FROM   INSERTED
  END

go

CHECKPOINT;

INSERT INTO dbo.T
VALUES      (2,
             'Private and Confidential')

GO

/*With INSTEAD OF trigger this phrase no longer found in log record*/
SELECT CASE
         WHEN [Log Record] LIKE '%Private and Confidential%' THEN 1
         ELSE 0
       END,
       [RowLog Contents 0]
FROM   sys.fn_dblog(NULL, NULL)
WHERE  Operation = 'LOP_INSERT_ROWS'
       AND AllocUnitName = 'dbo.T.PK' 

Der Aufbau der INSERTEDPseudotabelle erfolgt in, tempdbso dass diese Informationen jedoch nebenbei in den dortigen Datendateien erscheinen können.

Martin Smith
quelle