SQL Server 连接加密 -- SQL Server connection encyption

3 篇文章 0 订阅

转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/03/22/sql-server-1-sql-server-connection-encyption.aspx


联机从书上提到过从SQL Server 2005开始,SQL Server和客户端的连接是自动加密的。但是你可能也注意到在SQL Server Configuration Manager里是有地方去设置加密与否的,而且这个选项默认是关闭的。这可能会显得有些自相矛盾了。此外你也可能注意到,Server Configuration Manager和加密相关的选项出现在了两个地方,一个是客户端选项,一个是服务器端选项,这些又都有些什么区别呢?今天我来详细解释下它们之间的关系。

 

SQL Server中的“加密”发生在什么地方


总的来说,我把SQL Server的加密分成两个部分,一个是对数据的加密,一个是对连接的加密。对于数据的加密,主要是通过一系列的函数如EncryptbyKey,或者TDE来完成的。这部分不在这里展开了。

另外一部分是连接加密,自己分的话还能分成两个阶段。一个是建立连接时候的加密。另外一个阶段是连接建立起来之后,客户端和SQL Server在其上传输数据时候的加密。

 

建立连接时的加密


联机丛书上所说的SQL Server会自动加密连接就是指的这个阶段。这个阶段开始于客户端和SQL Server在TCP/IP协议栈的三次握手,止于客户端成功登陆SQL Server。从SQL Server 2005开始,这个阶段永远是加密的。

那么SQL Server是使用什么密钥来对连接加密的呢?默认情况下SQL Server会自动生成一个证书并使用这个证书来对连接做SSL加密。

大家可能会在SQL Server的Error log的开头部分看到这么一段话:

 

A self-generated certificate was successfully loaded for encryption

  

这段话就表明了SQL Server在启动的时候自动加载了自动生成的证书并且使用这个证书来加密。

我们可以做一个实验来验证它。将SA的密码设置为Password,然后我们在远端机器上使用SQL Server Management Studio并使用SA账户去连接SQL Server。同时我们使用微软的Network Monitor工具来抓取SQL Server和客户端之间的网络包。使用SA账户来做这个实验是因为,SA账户是一个SQL 验证账户,而SQL验证账户的密码都是由客户端通过网络直接提交给SQL Sever来做验证的。这也是为什么说SQL验证不如Windows验证安全的原因。通过实验:

1.       我们可以看到有SSL的数据包交换,因此你判定SQL Server已经使用了SSL来加密了。

  

2.       检查所有网络包的内容,我们是找不到Password的,也就是说网络上传输的不再是明文而是加密过的内容。

  

需要注意的一点是,SQL  Server自动生成的证书是一种自签名的证书,而通过自签名证书实现的SSL并不能提供很强的安全性。他对中间人攻击(man-in-the-middle attack)不具有抵抗能力。因此我们建议在生产环境中,应该手动给SQL Server配置证书,而不是让它使用自动生成的证书。关于更多SQL Server配置证书的内容,可以参考这里

我们继续讨论SQL Server在建立完连接后在该连接上的数据传送加密。

 

默认情况下SQL Server是否加密收发的数据包


答案是否定的。SQL Server默认只在建立连接时进行加密以保护客户端发送过来的账户登录信息

在上篇文章中所做的实验,我们可以看到SSL已经启用,并且在所有网络包中都找不到密码的明文。但是如果你选中任意一个TDS:SQLBatch的数据包,你可以看到类似如下的结果:

 

 

可以清楚的看到客户端发送的查询语句。如果你查看SQL Server返回来的数据包的话,你也同样能看到查询结果的数据明文。那么怎么来加密客户端和SQL Server之间传输的数据呢?

加密SQL Server收发的数据包


我们可以通过SQL Server的configuration Manager来配置SQL Server使得它加密和客户端之间的数据交换。在Configuration Manager中分别有两个地方来配置。

1.       SQL Server服务器端的加密配置。

 

如上图所示,右键点击“Protocols for MSSQLSERVER”,选择属性,你就可以看到Force Encryption选项。默认状态下这个选项是设置为No的,也就是说SQL Server不进行加密。

当把该选项设置为on之后,SQL Server就会要求对所有它和客户端之间的数据包传送进行加密,无论客户端是否配置为要求加密。此时用来加密的密钥仍旧是之前在建立连接阶段使用的证书。

需要注意的是,如果你是手动配置证书给SQL Server的话,你可能会发现一个现象。即使该证书已经过了有效期,或者该证书的根证书不受客户端的信任,客户端仍旧可以顺利的使用这个证书和SQL Server进行交流。这是一个by desing的行为。如果你要求你的客户端一定要信任该证书才可以连接的话,你就必须要配置客户端的加密选项。

如果你对如何手动配置证书不熟悉的话,可以参考这篇文章

 

2.       客户端的加密配置。

如果SQL Server服务器端的Force Encryption的选项为No的话,那么是否对数据进行加密就完全取决于客户端的配置,也就是客户端的数据库连接驱动的配置。

在Configuration Manager中,可以配置Native Client驱动程序的加密配置,如下图所示。

 

 

当Force Protocol Encryption为Yes的话,就表明客户端要求加密数据包。此时客户一定要信任SQL Server端的证书,否则连接无法建立。另外,需要注意的是,此处的配置只对使用Native Client的客户端程序有效果。其他驱动程序也会有相应的方法分别作配置。如ODBC驱动就可以通过Cliconfg控制台来配置,等等。

如上面提到的,如果客户端要求加密的话,则客户端一定要信任服务器端的证书。在这种情况下,你手动配置的证书(无论你是从第三方获得的,还是企业内部证书服务器获得的,甚至是使用SelfSSL或者Makecert获得的证书)都是正常工作的。唯一的例外是SQL Server自动生成的证书。每次SQL Server启动时,它自动生成的证书都是不一样的,而且该证书的subject属性的CN域和SQL Server主机的FQDN是不一样的。这种情况下客户端是不信任这张证书的,因为它的CN域和FQDN不符合。



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server OLE DB Provider是一个用于连接和访问SQL Server数据库的数据提供程序。它是由Microsoft开发的,为了方便开发人员在多种编程环境中与SQL Server数据库进行交互而设计。 SQL Server OLE DB Provider可以与各种编程语言和开发工具一起使用,包括Visual Basic、C#、ASP.NET等。它提供了一系列的接口和方法,使得开发人员可以方便地执行数据库操作,如查询、插入、更新和删除数据。 通过SQL Server OLE DB Provider,开发人员可以使用SQL语言来编写和执行数据库查询。它还支持事务处理和存储过程等高级功能,使得开发人员可以更加灵活和高效地操作数据库。 SQL Server OLE DB Provider还提供了一些性能优化的功能,例如连接池和命令缓存。连接池允许开发人员重复使用数据库连接,以减少连接的开销。命令缓存可以缓存已执行的命令,以加快后续执行同样命令的速度。 总之,SQL Server OLE DB Provider是一个强大而灵活的数据提供程序,可以帮助开发人员快速、高效地与SQL Server数据库进行交互。无论是小型的个人项目还是大型的企业应用,它都是一个非常有用的工具。 ### 回答2: SQL Server OLE DB Provider是一种用于连接和访问SQL Server数据库的数据访问技术。它是SQL Server提供的一种OLE DB驱动程序,用于支持通过OLE DB接口进行数据库操作。 SQL Server OLE DB Provider的使用可以通过编程语言(如C#、VB.Net等)来实现。首先,需要通过连接字符串指定要连接SQL Server数据库的相关信息,如服务器名称、数据库名称、身份验证方式等。然后,使用Connection对象建立与数据库的连接。接下来,可以使用Command对象执行SQL语句,如查询、插入、更新、删除等操作。执行SQL语句后,可以通过DataReader对象来读取和处理查询结果。最后,使用Connection对象关闭与数据库的连接SQL Server OLE DB Provider可以提供高性能的数据访问能力,并且支持灵活的数据操作。它还提供了一些高级特性,如事务处理、命令缓存、数据缓存等,可以提升数据库操作的效率和性能。此外,SQL Server OLE DB Provider还支持参数化查询,可以防止SQL注入攻击,并且提供了一些其他的安全特性,如加密通信等。 总而言之,SQL Server OLE DB Provider是一种可靠和高效的数据库访问技术,适用于连接和操作SQL Server数据库。通过合理的使用,可以实现对数据库的快速和可靠的访问,并提供了丰富的功能和特性来支持开发人员的需求。 ### 回答3: SQL Server OLE DB Provider是一种用于连接和访问SQL Server数据库的OLE DB提供程序。OLE DB是一种面向组件的数据访问技术,允许应用程序通过一组统一的API连接到不同的数据源,包括SQL ServerSQL Server OLE DB Provider提供了一个强大的接口,使开发人员能够使用SQL Server数据库进行高效的数据访问。它支持基本的数据操作(如插入、更新、删除和查询),还提供了事务处理的功能,可以保证数据的一致性和完整性。 使用SQL Server OLE DB Provider,开发人员可以编写基于SQL语言的查询来查询和操作数据库中的数据。他们可以使用标准的ADO(ActiveX Data Objects)对象模型来进行数据访问和操作,这使得编写和维护数据访问代码变得更加简单和方便。 除了支持标准的数据操作功能,SQL Server OLE DB Provider还提供了一些高级功能,如连接池、命令参数化、异步查询和分布式查询。这些功能可以提高数据访问的性能和灵活性,并帮助开发人员更好地管理和优化数据库操作。 总之,SQL Server OLE DB Provider是一种在应用程序中连接和访问SQL Server数据库的重要工具。它提供了强大的功能和灵活性,使开发人员能够高效地处理和管理数据库中的数据。如果您需要与SQL Server数据库进行交互,使用SQL Server OLE DB Provider将是一个很好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值