保护SQL Server的Internet安全

时间:2014-05-19 20:25:51

标签: sql-server security sql-server-2005

我希望这个问题不是太宽泛。我还在做研究,但我希望得到一些专家的意见。我们是一家软件提供商,我们的旗舰软件通过门户网站访问 - 我们的SQL服务器(主动 - 主动 - 被动群集)安全地位于我们的防火墙后面,只能通过我们的应用程序访问。我们有一个非常大的客户端希望进行分支,并希望对其数据库进行直接只读访问。这是我们以前没有做过的事情,让我们感到紧张。我希望有一些指导来保护互联网上的SQL服务器。

我应该说我们的集群包含数百个客户端数据库,其中只有一个将通过此Internet连接访问。如有必要,我们愿意添加其他硬件或软件层。这是SQL 2005。

谢谢大家。

2 个答案:

答案 0 :(得分:2)

基本上,您需要在您的网站和他们的网站之间建立VPN。这样你就可以将它们连接到你的本地网络了。

您使用的VPN应该能够允许您仅向数据库服务器本身公开访问。

完成后,请确保设置一个只拥有所需实际数据库权限的特定数据库用户。

答案 1 :(得分:2)

如果VPN不是一个选项,大多数防火墙将允许您在特定端口上为特定端口设置策略,其中远程客户端静态IP必须位于ip例外列表中。这样远程客户端只能访问该特定的SQL实例。然后,您需要仅在" public"下创建一个SQL用户。服务器角色。然后你需要进行用户映射并让该用户只能访问他们的数据库并给他们" db_denydatawriter"和" db_datareader"您可能还希望从列出其他数据库中删除访问权限,以便在您为客户数据库使用描述性名称时,他们不知道您的客户是谁。这可以在securables下的securables下完成。你必须点击搜索并选择"这个服务器" " permision"我们打电话给#34;查看任何数据库"。当然,你需要SQL身份验证才能工作。请记住,没有SQL性能经验的客户端可能会锁定表,索引等...查询不佳。你的商店写的一个sprocs列表可能是要走的路。

这是一个让你入门的例子。

USE [master]
GO
CREATE LOGIN [remoteuser] WITH PASSWORD=N'test', DEFAULT_DATABASE=[CLIENTDB], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE [CLIENTDB]
GO
CREATE USER [remoteuser] FOR LOGIN [remoteuser]
GO
USE [CLIENTDB]
GO
EXEC sp_addrolemember N'db_datareader', N'remoteuser'
GO
USE [CLIENTDB]
GO
EXEC sp_addrolemember N'db_denydatawriter', N'remoteuser'
GO
use [master]
GO
DENY VIEW ANY DATABASE TO [remoteuser]
GO