SQL Server数据更改和安全性
-
21-12-2019 - |
题
在我们的环境中使用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中存在任何安全的方式,请在此讨论。谢谢
解决方案
SA的问题是所有安全检查都会跳过此登录(或者在Sysadmin角色中的任何其他登录所述问题)。所以,你不能从sa撤消任何权限,也没有任何东西可以在sa无法绕过的实例级别。
就像其他人已经说过,除非有真正的sysadmin工作要做,否则不要让任何人登录。最佳实践是完全禁用SA登录。
在Cnuckerive侧,您最好的打赌否则是创建SQL Server审核会话并使用Windows安全日志作为目标。这样你的方式至少知道谁和在停止审计时。
不隶属于 StackOverflow