Estábamos probando un escenario y quería bloquear la conexión al servidor SQL solo a determinadas direcciones IP. He aquí cómo se resolvió el problema utilizando un trigger de inicio de sesión
CREATE TRIGGER AllowLocalOnly ON ALL SERVER FOR LOGON AS BEGIN DECLARE @IP Varchar(500) SET @IP = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(500)') IF @IP IN ('172.16.255.11', '172.20.254.1', '172.26.254.12') BEGIN Print 'Capture tu IP ' + @IP ROLLBACK TRANSACTION END END GO
Si el usuario intenta acceder a través de cualquiera de estas direcciones IP, el desencadenador de inicio de sesión se activará después de la fase de autenticación del registro, pero antes de que la sesión del usuario se establezca, y cancela la transacción. Esto restringirá la sesión para SQL Server.
Si hay un intento de inicio de sesión desde cualquiera de estas direcciones IP, se puede descubrir buscando en el registro de errores del servidor SQL Server algo similar a – ‘Capture tu 172.16.255.11’. Aunque no lo he probado, pero también se puede enviar un correo electrónico en vez de imprimir el error en el registro de errores.
Nota: los desencadenador de inicio de sesión sólo están disponibles en SQL Server 2005 Service Pack 2 en adelante.