【问题标题】:Secure communication between linked SQL Servers链接的 SQL Server 之间的安全通信
【发布时间】:2011-04-13 12:05:58
【问题描述】:

默认情况下,两个 SQL Server 之间传输的数据是否受到保护(加密)?如果没有,有没有办法做到这一点?

我有两个 SQL Server 2005 数据库在不同的服务器、不同的机器、不同的网络上运行。如何确保从一台服务器传输到另一台服务器的数据是安全的?我已尝试研究该主题,但找不到任何东西。

非常感谢, 塞巴斯蒂安

【问题讨论】:

  • 由于您是使用链接服务器执行此操作而不是编写自己的解决方案,因此最好在 Serverfault 上提出这个问题。请参阅这个现有问题:serverfault.com/questions/98084/…

标签: sql-server sql-server-2005 encryption


【解决方案1】:

通过 SQL Server 加密

  1. 在两台机器上提供证书。

  2. 将任何非服务器客户端配置为信任证书的根签名机构。见How to enable SSL encryption for an instance of SQL Server by using Microsoft Management Console

  3. 将服务器配置为强制所有传入连接使用 SSL,这样任何不支持此功能的客户端都将无法连接。在 SQL Server 配置管理器中,将“协议”部分中的 ForceEncryption 参数设置为“是”。

  4. 或者,您可以将Encrypted=yes 添加到连接/链接服务器的提供程序/连接字符串中,而不是前面的步骤。例如,如果您使用 sp_addlinkedserver 注册链接服务器,它可能看起来像这样:

    EXEC master.dbo.sp_addlinkedserver
       @server = N'LinkedServerName',
       @srvproduct = N'',
       @provider = N'SQLNCLI',
       @datasrc = N'Server\InstanceName',
       @provstr = N'Encrypt=yes;',
       @catalog = 'DatabaseName'
    ;
    

    我不建议您使用选项TrustServerCertificate=True,因为这将禁止客户端验证它所连接的服务器的身份。

    另外,如果使用 ODBC,可以在 DSN 中指定加密属性。

请注意,虽然服务器不需要安装证书,因为您 can configure them to automatically create and sign their own certificates,但最好手动安装它们,因为您可能会遇到自创建证书的问题,因为它们每次重启都会改变。

最好的安全性是客户端专门请求通道加密,因为这不仅会加密数据,而且客户端还会尝试通过证书验证服务器的身份,从而有助于缓解中间人攻击.

通过网络加密

另一种选择是在两台服务器的网络之间建立一条安全隧道(例如 VPN),并确保它们之间的流量路由完全通过该隧道。只要您确定流量通过正确的路线,这也是 100% 安全的。

【讨论】:

  • 感谢您的出色回答。但是@provstr = N'Encrypted=yes;' 不正确。应该是@provstr = N'Encrypt=yes;'
  • 非常感谢您提供非常好的答案。只是提醒任何需要设置 TrustServerCertificate 的人,它可能需要作为 TrustServerCertificate=yes 添加到提供程序字符串中。 (至少在我的情况下是这样。)
猜你喜欢
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多