문제

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 작업이 없으면 누구든지 sysadmin으로 로그인하지 마십시오.가장 좋은 방법은 SA 로그인을 모두 비활성화하는 것입니다.

CnCructive 측면에서 최상의 베팅은 SQL Server Audit 세션을 만들고 Windows 보안 로그를 대상으로 사용하는 것입니다.이 방법으로 적어도 감사를 누가 멈추었는지 알 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top