是否有办法将Microsoft SQL Server 2005上的特定SQL 2005登录(标准版本(sql处于混合模式))限制为特定IP地址,而其他登录(Windows身份验证的登录)不受影响?
答案 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,而不是允许其他人?在应用程序中实现安全性,不要在数据库级别反弹它们。