Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server数据更改和安全性_Sql Server_Data Security - Fatal编程技术网

Sql server SQL Server数据更改和安全性

Sql server SQL Server数据更改和安全性,sql-server,data-security,Sql Server,Data Security,在我们的环境中,任何使用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)

在我们的环境中,任何使用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登录


在CNStructure方面,最好的选择是创建SQL Server审核会话并将Windows安全日志用作目标。通过这种方式,您至少可以知道谁以及何时停止了审核。

SA的问题是,跳过了此登录名(或系统管理员角色中的任何其他登录名)的所有安全检查。所以,您不能撤销SA的任何特权,而且在实例级别上也没有SA无法绕过的任何操作

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


在CNStructure方面,最好的选择是创建SQL Server审核会话并将Windows安全日志用作目标。通过这种方式,您至少可以知道谁以及何时停止了审核。

SA的问题是,跳过了此登录名(或系统管理员角色中的任何其他登录名)的所有安全检查。所以,您不能撤销SA的任何特权,而且在实例级别上也没有SA无法绕过的任何操作

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


在CNStructure方面,最好的选择是创建SQL Server审核会话并将Windows安全日志用作目标。通过这种方式,您至少可以知道谁以及何时停止了审核。

SA的问题是,跳过了此登录名(或系统管理员角色中的任何其他登录名)的所有安全检查。所以,您不能撤销SA的任何特权,而且在实例级别上也没有SA无法绕过的任何操作

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


在CNStructure方面,最好的选择是创建SQL Server审核会话并将Windows安全日志用作目标。通过这种方式,您至少可以知道谁以及何时停止了审核。

如果一些人以
SA
身份登录,您就无法控制他们的活动,或者如果他们不想被监控,甚至无法监控他们的活动,而将
SA
角色授予许多用户也不是一个好主意。为您的用户/开发人员分配一个足以满足其需要的适当角色,然后创建此触发器并取消其对此触发器的禁用权限。您似乎很清楚让其他人以
sa
身份连接的问题。我不知道你希望别人怎么解决你的问题。充其量,你只是在玩猫捉老鼠的游戏,总是试图领先一步。最好的解决方案是你显然不想听到的——不要让其他人以
sa
身份连接(或使用任何其他具有
sysadmin
权限的登录)。如果一些人以
sa
身份登录,你就无法控制他们的活动,或者如果他们不想被监视,甚至无法监视他们的活动,不管怎样,给许多用户提供
SA
角色从来都不是一个好主意。为您的用户/开发人员分配一个足以满足其需要的适当角色,然后创建此触发器并取消其对此触发器的禁用权限。您似乎很清楚让其他人以
sa
身份连接的问题。我不知道你希望别人怎么解决你的问题。充其量,你只是在玩猫捉老鼠的游戏,总是试图领先一步。最好的解决方案是你显然不想听到的——不要让其他人以
sa
身份连接(或使用任何其他具有
sysadmin
权限的登录)。如果一些人以
sa
身份登录,你就无法控制他们的活动,或者如果他们不想被监视,甚至无法监视他们的活动,不管怎样,给许多用户提供
SA
角色从来都不是一个好主意。为您的用户/开发人员分配一个足以满足其需要的适当角色,然后创建此触发器并取消其对此触发器的禁用权限。您似乎很清楚让其他人以
sa
身份连接的问题。我不知道你希望别人怎么解决你的问题。充其量,你只是在玩猫捉老鼠的游戏,总是试图领先一步。最好的解决方案是你显然不想听到的——不要让其他人以
sa
身份连接(或使用任何其他具有
sysadmin
权限的登录)。如果一些人以
sa
身份登录,你就无法控制他们的活动,或者如果他们不想被监视,甚至无法监视他们的活动,不管怎样,给许多用户提供
SA
角色从来都不是一个好主意。为您的用户/开发人员分配一个足以满足其需要的适当角色,然后创建此触发器并取消其对此触发器的禁用权限。您似乎很清楚让其他人以
sa
身份连接的问题。我不知道你希望别人怎么解决你的问题。在