Сервер SQL Server Изменение и безопасность
-
21-12-2019 - |
Вопрос
В нашей среде любой пользователь, который вход с 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 в качестве цели.Таким образом, вы хотя бы знаете, кто и когда остановил аудит.