默认情况下SQL Server的客户端与服务端是使用SQL明文传输数据的。 此时攻击者可以通过修改SQL语句等方式,获取系统权限,威胁数据和系统安全。
使用抓包工具Wireshark可抓取到SQL语句的明文,见下图。
有两个比较简便的方法来实现SQL Server客户端与服务端的数据加密传输。
方法一:更改SQL Server服务端的配置,实现所有客户端与服务端的数据加密传输。
其实解决这个问题很简单,只需要更改SQL Server服务端的一个配置项即可实现客户端与服务端间数据的加密传输,本文以 SQL Server 2008 R2为例。
1.点击开始菜单中Microsoft SQL Server 2008 R2的配置工具文件夹,点击SQL Server配置管理器。
2.在打开的窗口中点击SQL Server网络配置,找到想要实现加密传输的数据库实例,右键点击属性菜单项。
3.在属性窗口中将强制加密项对应的值由“否”更改为“是”,即启用安全传输层协议TLS,点击下方的确定按钮,提示重启数据库服务,以使更改生效。
4.在计算机的控制面板中,依次点击管理工具、服务,找到对应的数据库服务,右键点击重新启动菜单项,等待数据库服务完成重启即可。
5.数据库服务重启成功后,再次使用Wireshark抓取数据,可见SQL语句已实现加密传输。
方法二:更改SQL Server客户端的连接字符串,实现当前客户端与服务端的数据加密传输。
在数据库客户端的连接字符串中添加两个属性:
Encrypt=True//开启加密传输,启用安全传输层协议TLS
TrustServerCertificate=True//使用 TLS 加密通信层时,自动信任服务器传输层安全性 (TLS)证书
;Encrypt=True; TrustServerCertificate=True" />
更改连接字符串后,使用Wireshark抓取数据,如上图所示,SQL语句已实现加密传输。