Изменение данных 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 в качестве цели. Таким образом, вы будете хотя бы знать, кто и когда остановил аудит.