Você pode usar um gatilho de logon para isso.
CREATE TRIGGER TR_check_ip_address
ON ALL SERVER
FOR LOGON
AS
BEGIN
DECLARE @ip_addr varchar(48)
SELECT @ip_addr = client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
IF ORIGINAL_LOGIN() = 'bob' AND @ip_addr <> '127.0.0.1'
ROLLBACK;
END
Se você tentar se conectar a partir de um IP não autorizado, receberá um erro:
Logon failed for login 'bob' due to trigger execution.
Lembre-se de que os gatilhos de logon são potencialmente maus e também podem acabar bloqueando todos os usuários da instância. Seja cuidadoso!
No entanto, acho que você realmente não precisa fazer isso. Se você deseja habilitar conexões a partir de uma lista de endereços conhecidos, um firewall é a ferramenta mais adequada para o trabalho . A pior coisa que pode acontecer é o usuário errado se conectar a partir de um endereço IP conhecido, o que é bastante improvável se os usuários mantiverem suas credenciais com cuidado.
Além disso, leve em consideração que os endereços IP podem ser falsificados, por isso não tenho certeza de qual grau de segurança adicional você estaria fornecendo.
Você pode conseguir isso usando o gatilho de logon da seguinte maneira
Depois que o gatilho é criado, você pode encontrá-lo em Objetos do servidor -> guia Triggers
No meu blog connectsql.com
fonte