Sql server 为internet保护SQL Server

Sql server 为internet保护SQL Server,sql-server,security,sql-server-2005,Sql Server,Security,Sql Server 2005,我希望这个问题不要太宽泛。我仍在做研究,但我希望从一些专家那里得到意见。我们是一家软件供应商,我们的旗舰软件是通过门户访问的——我们的SQL Server(主动-被动群集)安全地位于我们的防火墙后面,只能通过我们的应用程序访问。我们有一个非常大的客户,希望做一个分支,并希望直接只读访问他们的数据库。这是我们以前从未做过的事情,让我们感到紧张。我希望能有一些指导方针来保护互联网上的SQL server 我应该说,我们的集群包含数百个客户机数据库,其中只有一个可以通过internet连接访问。如有必

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

我应该说,我们的集群包含数百个客户机数据库,其中只有一个可以通过internet连接访问。如有必要,我们愿意增加额外的硬件或软件层。这是SQL2005


谢谢大家。

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

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


一旦有了VPN,请确保您设置的特定数据库用户仅对其所需的实际数据库拥有权限。

如果VPN不是一个选项,则大多数防火墙将允许您在特定端口上为特定入站ip设置策略,远程客户端静态ip必须位于ip例外列表中。这样,远程客户端将只能访问特定的SQL实例。然后,您只需要在“public”服务器角色下创建一个SQL用户。然后,您需要进行用户映射,只允许该用户访问他们的数据库,并给他们“db_denydatawriter”和“db_datareader”,您可能还希望取消列出其他数据库的访问权限,这样,如果您对客户机数据库使用描述性名称,他们就不知道您的客户机是谁。这可以在“安全”下的“安全”下进行。您必须单击“搜索”并选择“此服务器”或“权限”,我们称之为“查看任何数据库”。当然,您需要SQL身份验证才能工作。请记住,在SQL性能方面没有经验的客户机可能会锁定表、索引等。。。问得不好。一份由你的商店写的狂欢节清单可能是最好的选择

下面是一个让您开始学习的示例

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

我会尽量避免给他们直接读取权限。他们需要这种访问的原因是什么?考虑提供一个API,为它们提供对数据的等效访问,同时在客户端和数据库之间提供某种程度的抽象。我的安全人员对从互联网直接访问服务器非常谨慎。我们也在寻找复制到新sql实例的选项,并让这个新实例访问Internet。我的安全人员非常担心允许从Internet访问共享sql server,即使受到IP的限制。除此之外,你所说的一切都是令人愉快的。是的,这应该是最后的选择。我认为您在另一台服务器上复制的想法是一个更好的选择,但我仍然会锁定新实例。提供我的答案是因为我知道有时正确的方法不是一个选项。