Вопрос

В нашей среде любой пользователь, который вход с 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.Лучшая практика - это отключить войти в систему.

На Cnstructive Side, ваша лучшая ставка в противном случае состоит в том, чтобы создать сеанс аудита SQL Server и использовать журнал безопасности Windows в качестве цели.Таким образом, вы хотя бы знаете, кто и когда остановил аудит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top