前言

很多客户在对数据库做安全审计时要求配置连接加密,本文就如何配置加密以及使用证书做一个系统的整理。

连接加密

首先,连接加密不是透明数据加密,很多人经常把两个概念混淆。连接加密是指客户端程序和SQL Server通信时的加密,保护数据在传输过程中的安全。

连接加密是SQL Server的TDS协议和TLS协议结合完成的,是在客户端驱动程序(ADO.NET、JDBC、OLEDB等)和SQL Server服务端实现的,对于上层的应用程序是透明的。

服务器端配置

打开SQL Server配置管理器,在SQL Server网络配置节点下,选择要启用加密连接的实例,右键,选择“属性”,在弹出的窗口中配置强行加密。确定后,重启SQL Server服务。

通过视图sys.dm_exec_connections的encrypt_option属性可以看到所有的连接都已经加密了。

说明:如果是SQL Server故障转移群集或者AlwaysOn,每个节点都需要配置。

客户端配置

在服务器端启动强制加密是最简单的方法,如果前端应用程序使用非常老的数据库驱动程序,不支持TLS协议,无法正常连接数据库,例如低版本的PB、DELPHI等。另外,基于网络抓包分析的审计软件也无法工作。在这种情况下,可以在客户端进行有选择性地配置。

通过在数据库连接字符串中增加Encrypt和TrustServerCertificate两个关键词来实现。

ADO.NET

JDBC

 

SQL Server Management Studio

 

老版本SQL Server Management Studio

 

配置证书

无论是在服务端还是客户端配置连接加密,都需要使用证书。默认情况下,SQL Server会生成自签名证书,在ERROR_LOG中可以看到一条“已成功加载自行生成的证书以进行加密”的日志。

大多数情况下,使用自签名证书就足够了。如果想使用CA机构颁发的第三方证书,可按照以下步骤配置。

运行mmc打开控制台,添加证书管理。

 

在“个人”节点下按照向导导入证书。

 

注意:导入证书的使用者属性必须与服务器的完全限定域名 (FQDN) 一致。如果是SQL Server故障转移群集,要和虚拟服务器的FQDN一致。

为SQL Server启动账号配置权限。在SQL Server配置管理器中查看启动账号。

 

在SQL Server配置管理器中,选择证书并重启SQL Server服务。注意:SQL Server 配置管理器中只能显示与服务器FQDN一致的证书,所以显示不出为SQL Server故障转移群集虚拟服务器名称创建的证书。需要通过修改注册表的方式配置,具体步骤见“SQL Server故障转移群集下配置证书”。

通过ERROR_LOG可以看到SQL Server使用的证书。

SQL Server故障转移群集下配置证书

首先按照上面的步骤在所有节点导入证书,然后复制出证书的指纹。

 

在所有的节点中打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Certificate项(注意替换成实际的版本和实例名),填写复制的指纹数据,在填写时去掉数据中的空格。

 

最后,依次切换每个节点,验证SQL Server服务能否正常启动,并验证前端应用是否能正常连接。

为SQL Server配置连接加密的更多相关文章

  1. 请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)

    程序异常,错误信息:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (pro ...

  2. 服务器安全策略之《启用Windows 防火墙情况下配置允许SQL Server远程连接》

    为了服务器的安全,通常情况下我们需要启用Windows 防火墙,然而在启用了Windows 防火墙后会发现会引发一系列的问题,比如无法通过本地远程服务器桌面.无法在本地远程连接SQL Server等, ...

  3. SQL Server 远程连接配置

    打开sql server配置工具 SQL Server网络配置→SQLEXPRESS的协议→启用TCP/IP→右键属性→IP地址→IPALL端口修改为1433→重启SQL Server服务 https ...

  4. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

    在visual studio 中添加数据库应用时,报错,提示如下: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL ...

  5. 在与SQL Server建立连接时出现于网络相关的或特定于实例的错误

    客户遇到一个问题,用“服务器名\实例名”远程连接另外一台命名实例的时候连接失败,报“在与SQL Server建立连接时出现于网络相关的或特定于实例的错误,未找到或无法访问服务器.请验证实例名称是否正确 ...

  6. 与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。

    今天同学请教我数据库为什么打不开了,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在 ...

  7. 无法打开SQL Server的连接

       机房收费系统重构版的登陆敲了好几天了,总算把登陆窗口敲完了,代码调试的差点儿相同了,问题就处在数据库了.    SQL Server配置管理里的SQL  Server服务都启动了,可是还是报这个 ...

  8. provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接

    问题描述: SQL Sever2012 中:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为 ...

  9. 远程连接SqlServer 数据库时提示 "在与SQL Server 建立连接时出现与网络相关的或特定实例的错误" 解决方法

    前言 由于在之前的职业生涯中, 无论是数据库还是开发环境, 都是前人弄好的,自己只管使用就好啦.并不知安装过程中会出现各种各样的错.最近接触服务器之后,开发环境以及配置各方面都是从头到脚开始安装到配置 ...

  10. 干货 | SSMS客户端连接京东云RDS SQL Server配置方法

    干货 | SSMS客户端连接京东云RDS SQL Server配置方法 原创: 于振江 京东云开发者社区  微软SQL Server, Oracle数据库以及MySQL系列占据了关系型数据库市场的绝对 ...

随机推荐

  1. 使用Ant Design Vue的select搜索框出现的问题

    Select 选择器进行搜索 <template> <div> <a-form-item label="分类:"> <a-select p ...

  2. 8.4 ProcessHeap

    ProcessHeap 是Windows进程的默认堆,每个进程都有一个默认的堆,用于在进程地址空间中分配内存空间.默认情况下ProcessHeap由内核进行初始化,该堆中存在一个未公开的属性,它被设置 ...

  3. Linux系统NTP配置同步修改硬件时钟

    前言: 硬件时钟:即BIOS时间,就是CMOS设置时看到的时间,存储在主板BIOS里,关机及断电后由主板电池供电维持时间的守时.    系统时钟:linux系统Kernel时间,由CPU守时,关机及断 ...

  4. MyISAM存储引擎的表级锁

    MyISAM存储引擎的表级锁 如果了解过文件锁的用法,那理解数据库锁就简单了.锁其实就协调多个进程或线程并发时,处理访问同一个资源的机制.在项目开发中,表锁是MySQL中作用范围较大的一种锁,它锁定的 ...

  5. elasticsearch源码debug

    一.下载源代码 直接用idea下载代码https://github.com/elastic/elasticsearch.git 切换到特定版本的分支:比如7.17,之后idea会自己加上Run/Deb ...

  6. JVM(Java虚拟机)整理(二)

    前言 上一篇内容:JVM(Java虚拟机)整理(一)https://www.cnblogs.com/xiegongzi/p/17994659 Java 内存模型(JMM) Java 内存模型引入 声明 ...

  7. 资深工程师 VSCode C/C++ 必备开发插件

    1.前言 俗话说"工欲善其事,必先利其器",下面介绍几个VSCode提高开发效率的插件,资深工程师必备. 2.基础插件 2.1.Chinese(Simplified) vscode ...

  8. 洛谷P1249最大乘积,数论找规律

    这道题是数论加高精度,高精度倒好说,就是高精度乘法实现,模拟列竖式乘法,但是找出要乘的这几个数实属不容易,没学过数论,只能从题解中学怎么找规律这里引用一下洛谷题解区赞数最高的题解 不知道大家看其他的题 ...

  9. ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记

    任务20:Consent Controller Get请求逻辑实现 接着上一节的思路,实现一下 ConsentController 根据流程图在构造函数注入 IClientStore,IResourc ...

  10. Linux-如何比较比较两个目录中的文件差异

    在 Linux 命令行中比较两个目录是一项常见的任务,特别是当你需要确保两个目录之间的文件完全相同时. 本文我们将介绍一些在 Linux 命令行中比较两个目录的方法. 方法一:使用 diff 命令比较 ...