【问题标题】:SQL Server data change and SecuritySQL Server 数据更改和安全性
【发布时间】:2014-05-25 19:44:59
【问题描述】:

在我们的环境中,任何使用 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 登录,您将无法控制他们的活动,如果他们不想被监控,甚至无法监控他们的活动,并且将SA 角色分配给许多用户绝不是一个好主意反正。为您的用户/开发人员分配一个足以满足他们需求的适当角色,然后创建此触发器并取消他们在此触发器上禁用的权限。
  • 您似乎很清楚让其他人以sa 连接的问题。我不确定您希望任何人如何解决您的问题。充其量,你会玩猫鼠游戏,总是试图领先一步。最好的解决方案是你显然不想听到的——不要让其他人以sa 连接(或任何其他具有sysadmin 权限的登录)。

标签: sql-server data-security


【解决方案1】:

SA 的问题是,此登录(或任何其他 sysadmin 角色登录)都跳过了所有安全检查。因此,您无法撤销 SA 的任何特权,而且您在实例级别上也无能为力,SA 无法绕过。

就像其他人已经说过的那样,除非有真正的系统管理员工作要做,否则不要让任何人以系统管理员身份登录。最佳做法是完全禁用 SA 登录。

在建设性方面,最好的办法是创建 SQL Server 审核会话并使用 Windows 安全日志作为目标。这样您至少可以知道谁以及何时停止了审核。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多