Изменение данных SQL Server и безопасность

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

1 ответ

Решение

Проблема с SA состоит в том, что все проверки безопасности пропускаются для этого логина (или любого другого логина в роли sysadmin в этом отношении). Таким образом, вы не можете отозвать любую привилегию из SA, а также на уровне экземпляра вы ничего не можете сделать, что SA не может обойти.

Как уже говорили другие, не позволяйте никому входить в систему как системный администратор, если не будет настоящей работы системного администратора. Лучше всего вообще отключить логин SA.

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

Другие вопросы по тегам