Answers:
您可以为此使用登录触发器。
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地址可能被欺骗,因此我不确定您将提供哪种程度的附加安全性。
您可以使用以下登录触发器来实现此目的
USE master
GO
-- Create table to hold valid IP values
CREATE TABLE ValidIPAddress (IP NVARCHAR(15)
CONSTRAINT PK_ValidAddress PRIMARY KEY)
-- Declare local machine as valid one
INSERT INTO ValidIPAddress
SELECT '<local machine>'
-- Create Logon Trigger to stop logins from invalid IPs
CREATE TRIGGER tr_LogOn_CheckIP ON ALL SERVER
FOR LOGON
AS
BEGIN
DECLARE @IPAddress NVARCHAR(50) ;
SET @IPAddress = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]',
'NVARCHAR(50)') ;
IF NOT EXISTS ( SELECT IP
FROM master..ValidIPAddress
WHERE IP = @IPAddress )
BEGIN
-- If login is not a valid one, then undo login process
SELECT @IPAddress
ROLLBACK --Undo login process
END
END
创建触发器后,您可以在服务器对象->触发器选项卡下找到它
从我的博客 connectsql.com