dmc*_*dmc 7 sql-server-2008 sql-server
供应商系统(即在我的控制之外)正在将一行插入到我控制的数据库中的表中。此插入中的一列将包含我不希望出现在数据库中的敏感信息。
如果我使用INSTEAD OF INSERT触发器将这一列清空,敏感信息是否仍会出现在事务日志中?
是的,这将阻止信息显示在日志中。事务日志只需要记录足够的信息即可恢复实际写入数据页的行。您可以从sys.fn_dblog如下使用中看到这一点。
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'
Run Code Online (Sandbox Code Playgroud)
INSERTED伪表的构建发生在,tempdb因此该信息可能会顺便出现在那里的数据文件中。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |