2

有没有办法将 Microsoft SQL Server 2005 标准版(sql 处于混合模式)上的特定 SQL 2005 登录限制为特定 IP 地址,而其他登录(Windows 身份验证的登录)不受影响?

4

6 回答 6

5

我使用以下触发器来限制对特定登录 - IP 组合的访问。

CREATE TRIGGER [LOGIN_IP_RESTRICTION]
    ON ALL SERVER FOR LOGON
AS
BEGIN
    DECLARE @host NVARCHAR(255);

    SET @host = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'nvarchar(max)');

    IF(EXISTS(SELECT * FROM master.dbo.IP_RESTRICTION 
        WHERE UserName = SYSTEM_USER))
    BEGIN
        IF(NOT EXISTS(SELECT * FROM master.dbo.IP_RESTRICTION 
            WHERE UserName = SYSTEM_USER AND ValidIP = @host))
        BEGIN
            ROLLBACK;
        END
    END
END;

表 IP_RESTRICTION 的 DDL:

CREATE TABLE [dbo].[IP_RESTRICTION](
    [UserName] [varchar](255) NOT NULL,
    [ValidIP] [varchar](15) NOT NULL,
    [Comment] [nvarchar](255) NULL,
 CONSTRAINT [PK_IP_RESTRICTION] PRIMARY KEY CLUSTERED 
([UserName] ASC, [ValidIP] ASC) ON [PRIMARY]
) ON [PRIMARY]
于 2008-11-28T14:49:02.773 回答
2

是的,你可以这样做。您需要按照此处所述编写登录触发器:

http://technet.microsoft.com/en-us/library/bb326598.aspx

在过去的十五分钟里,我一直在玩弄它,但取得的成功有限,但也许这里还有其他人完成了按 IP 地址进行 DDL 登录触发器过滤,可以显示源代码。

于 2008-11-15T13:05:40.267 回答
2

几句警告!

如果您发现此脚本有任何问题,并在您意识到之前注销,您将自己锁定在 SQL Server 之外。

然后,您将需要以最小模式离线重新启动服务器 -f

然后在所有服务器上删除触发器 [LOGIN_IP_RESTRICTION]

那你就有机会回来了。我怎么知道?我刚刚犯了那个错误,在我弄清楚如何重新进入并取下扳机之前,我有一些肠子松动的时刻。

于 2012-04-16T11:52:17.810 回答
1

我已将系统上的登录限制为单个 IP 地址,只需使用防火墙即可。

于 2008-11-06T16:10:50.077 回答
1

SQL Server 可以通过服务器管理器映射到多个端口/IP 配置,但是 AFAIK 没有办法将登录方法绑定到端口/IP。

我唯一能想到的是创建一个触发器 FOR LOGON 并在该触发器内测试事件数据,例如:

SELECT EVENTDATA().value ('(/EVENT_INSTANCE/LoginType)','nvarchar(max)'), EVENTDATA().value ('(/EVENT_INSTANCE/ClientHost)','nvarchar(max)')

...如果您不喜欢您发现的内容,可能会调用 RAISEERROR 或 ROLLBACK 可能会终止连接?

希望这可以帮助

于 2008-11-07T02:05:24.773 回答
0

为什么需要通过 IP 地址进行限制?如果您的所有用户都通过了身份验证,只需在 SQL Server 上设置组权限,并允许或拒绝您想要的组。

如果问题是不同用户使用具有相同 SQL 登录名的应用程序(您提到您使用的是混合模式),那么问题是您为什么要允许使用这些应用程序的某些用户访问 SQL Server,而不允许其他用户?在应用程序中实现安全性,不要在数据库级别反弹它们。

于 2008-11-07T02:30:52.243 回答