SQL 2005 sql登录ip限制

时间:2008-11-06 16:07:14

标签: sql-server security login

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

6 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

是的,你可以这样做。您需要编写一个登录触发器,如下所述:

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

我在过去的十五分钟里面对它并且成功有限,但也许还有其他人在这里做了一个DDL登录触发器按IP地址过滤,可以显示源代码。

答案 2 :(得分:2)

几句警告!

如果您对此脚本出现任何错误,并在您意识到之前进行注销,那么您将自己锁定在SQL Server之外。

然后,您需要以最小模式-f

离线重启服务器

然后DROP TRIGGER [LOGIN_IP_RESTRICTION]在所有服务器上

然后你有机会回来。我怎么知道?我犯了这个错误,并且在我弄清楚如何重新进入并移除触发器之前有一些松动的时刻。

答案 3 :(得分:1)

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

答案 4 :(得分: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可能会终止连接?

希望这有帮助

答案 5 :(得分:0)

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

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