Вы можете использовать триггер входа в систему для этого.
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
Если вы попытаетесь подключиться с неавторизованного IP, вы получите сообщение об ошибке:
Logon failed for login 'bob' due to trigger execution.
Помните, что триггеры входа в систему являются потенциально злыми и могут также в конечном итоге заблокировать всех из экземпляра. Быть осторожен!
Тем не менее, я думаю, вам не нужно этого делать. Если вы хотите разрешить подключения из списка известных адресов, брандмауэр является наиболее подходящим инструментом для работы . Худшее, что может случиться, - это неправильный пользователь, подключающийся с известного IP-адреса, что маловероятно, если пользователи будут тщательно хранить свои учетные данные.
Кроме того, примите во внимание, что IP-адреса могут быть подделаны, поэтому я не уверен, какую степень дополнительной безопасности вы бы обеспечили.
Вы можете добиться этого, используя триггер входа в систему, как показано ниже
После создания триггера его можно найти в разделе «Объекты сервера» -> вкладка «Триггеры».
Из моего блога connectsql.com
источник