sql-server - 链接的 SQL Server 之间的安全通信

标签 sql-server sql-server-2005 encryption

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

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

非常感谢,
塞巴斯蒂安

最佳答案

通过 SQL Server 加密

  • 在两台机器上配置证书。
  • 将任何非服务器客户端配置为信任证书的根签名机构。见 How to enable SSL encryption for an instance of SQL Server by using Microsoft Management Console .
  • 配置服务器以强制所有传入连接使用 SSL,以便任何不支持此功能的客户端将无法连接。在 SQL Server 配置管理器中,设置 ForceEncryption在“协议(protocol)”部分中将参数设置为"is"。
  • 或者,您可以添加 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 ,最好手动安装它们,因为您可能会遇到自创建证书的问题,因为它们在每次重新启动时都会更改。

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

    通过网络加密

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

    关于sql-server - 链接的 SQL Server 之间的安全通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3731755/

    相关文章:

    tsql - 如何获取多列以在游标循环中使用?

    encryption - 7-zip 存档的加密机制如何实现 key_derivation 和 key_verification 函数?

    c - 如何在 RC4 上暴力查找内部状态?

    mysql - 按多个参数分组的累积和

    sql-server - SQL Server 递归路径 ID

    sql - 根据相关节点从层次结构中选择行

    sql-server - 在Sql Server中的单例语句中组合多个条件

    sql-server - "FOR XML EXPLICIT"Msg 6833 "requires parent tags to be opened first"Error 故障排除建议

    mysql - 将现有 MsSQL 数据库迁移到 MySql 的最佳方法?

    java - 解密错误: caused by java. lang.noclassdeffounderror com/android/org/constcrypt/OpenSSLRSAPublicKey android