在我们的环境中,任何使用 sa 登录的用户都可以更改任何表数据。
所以我编写触发器来捕获更改的数据,例如谁更改,来自哪个 IP 等
CREATE TRIGGER [TRG_Users]
ON [dbo].[UserRights] AFTER INSERT, UPDATE, DELETE
AS
DECLARE @strIP VARCHAR(MAX)
SET @strIP=(SELECT dbo.GetCurrentIP())
IF EXISTS (SELECT * FROM INSERTED) AND EXISTS (SELECT * FROM DELETED)
--PRINT 'Update happened';
INSERT INTO Logger(IPAddress,Status)
VALUES (@strIP,'UPDATE')
ELSE
IF EXISTS (SELECT * FROM INSERTED)
--PRINT 'Insert happened';
INSERT INTO Logger(IPAddress,Status)
VALUES (@strIP,'INSERT')
ELSE
--PRINT 'Delete happened';
INSERT INTO Logger(IPAddress,Status)
VALUES (@strIP,'DELETE')
CREATE FUNCTION [dbo].[GetCurrentIP] ()
RETURNS varchar(255)
AS
BEGIN
DECLARE @IP_Address varchar(255);
SELECT @IP_Address = client_net_address
FROM sys.dm_exec_connections
WHERE Session_id = @@SPID;
Return @IP_Address;
END
但问题是用户可以在禁用特定表上的触发器后更改数据。因此触发器不会触发,用户可以无缝更改数据。
所以请指导我什么是捕获数据更改并记录它们的最佳方法。所以没有人可以绕过安全性。请不要告诉我禁用 sa 帐户,因为我正在寻找不同的方法来捕获更改数据。sql server 2005/2008 中是否存在任何安全方式,如果是,请在此处讨论。谢谢