Cambio de datos y seguridad de SQL Server
-
21-12-2019 - |
Pregunta
En nuestro entorno, cualquier usuario que inicie sesión con SA puede cambiar cualquier dato de tabla.
Entonces, escribo disparador para capturar datos modificados como los que cambian, desde donde IP, etc. esta
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
Pero el problema es que el usuario puede cambiar los datos después de deshabilitar el disparador en una tabla específica.Así que el disparador no disparará y el usuario puede cambiar a la perfección los datos.
Así que guíame cuál es la mejor manera de capturar los cambios de datos y registrarlos.Así que nadie puede pasar por alto la seguridad.Por favor, no me digas Deshabilitar SA Cuenta porque busco un enfoque diferente para capturar los datos de cambio.¿Existe alguna forma segura en SQL Server 2005/2008 en caso afirmativo, entonces trate aquí?gracias
Solución
Problema con SA es que todos los controles de seguridad se saltan para este inicio de sesión (o cualquier otro inicio de sesión en el rol de SysAdmin para esa materia).Por lo tanto, no puede revocar ningún privilegio de SA y también no hay nada que pueda hacer en el nivel de instancia, que SA no puede pasar por alto.
Como los demás ya dijeron, no dejes que nadie se inicie sesión como un Sysadmin, a menos que haya un trabajo real de SysAdmin.La mejor práctica es deshabilitar el inicio de sesión de SA.
En un lado censtructivo, su mejor opción es crear una sesión de auditoría de SQL Server y usar el registro de seguridad de Windows como un objetivo.De esta manera, al menos sabrá quién y cuando detuvo la auditoría.