默认情况下,两个 SQL Server 之间传输的数据是否受到保护(加密)?如果没有,有办法实现这一点吗?
我有两个 SQL Server 2005 数据库运行在不同的服务器、不同的计算机、不同的网络上。如何确保从一台服务器传输到另一台服务器的数据安全?我尝试过研究这个主题,但找不到任何东西。
非常感谢, 塞巴斯蒂安
在两台机器上配置证书。
将任何非服务器客户端配置为信任证书的根签名机构。请参阅如何使用 Microsoft 管理控制台为 SQL Server 实例启用 SSL 加密。
将服务器配置为首选传入连接使用 SSL,以便客户端在没有加密的情况下无法连接。在 SQL Server 配置管理器中,将“协议”部分中的
ForceEncryption
参数设置为“是”。 (在某些情况下,使用不正确的设置的客户端理论上仍然可以在不加密的情况下进行连接。)
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 中指定加密属性。
,但最好手动安装它们,因为您可能会遇到自行创建的问题证书,因为它们在每次重新启动时都会更改。 最好的安全性是当客户端专门请求通道加密时,因为这不仅会加密数据,而且客户端还会尝试通过证书验证服务器的身份,从而有助于减轻中间人攻击。 通过网络加密
另一种选择是在两个服务器网络之间建立安全隧道(例如 VPN),并确保它们之间的流量路由完全通过该隧道。只要您确定流量经过正确的路线,这也是 100% 安全的。
我意识到这是一个非常古老的线程,但我刚刚发现这里有一些东西可能会产生误导。
SQL 服务器端的 ForceEncryption 参数不会使客户端未设置 Encrypt = True 的客户端失败。重要的是,
即使服务器上的 ForceEncryption 设置为“是”,您也可以创建与 SQL Server 实例的不安全连接。您可以通过在服务器端设置 ForceEncryption = Yes 来验证这一点,然后使用 SSMS 连接到该 SQL Server 并选择不在客户端加密连接。 您可以通过访问对象资源管理器中服务器的属性,然后单击查看连接属性(右键单击对象资源管理器中的服务器名称,然后单击属性)来检查客户端连接的加密状态。
然后您可以看到 Ecypted 属性的值设置为 No。
然后,您可以执行 select 或其他 SQL 语句来确认您能够从服务器端访问数据,而无需加密。我认为,为了实现完整的端到端加密,必须在客户端和服务器端都设置加密。