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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top