我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MSSQL - 最佳实践

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MSSQL - 最佳实践

MSSQL - 最佳实践 - 使用SSL加密连接

author: 风移

摘要

在SQL Server安全系列专题月报分享中,往期我们已经陆续分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术、列加密技术带来的查询性能问题以及相应解决方案、行级别安全解决方案、SQL Server 2016 dynamic data masking实现隐私数据列打码技术、使用证书做数据库备份加密和SQL Server Always Encrypted这八篇文章,直接点击以上文章前往查看详情。本期月报我们分享SQL Server SSL证书连接加密技术,实现网络上传输层连接加密。

问题引入

在SQL Server关系型数据库中,我们可以使用透明数据加密(TDE)、行级别加密(Row-level Security)、数据打码(Dynamic Data Masking)和备份加密(Backup Encryption)等技术来实现数据库引擎层的安全。但是,在网络传输层,客户端和服务端之前默认没有数据加密传输保护。因此,为了提高链路安全性,我们可以启用SSL(Secure Sockets Layer)加密,SSL在传输层对网络连接进行加密,能提升数据通道的安全性,但同时会增加网络连接响应时间和CPU开销。

准备工作

为了方便观察,我们使用Microsoft Network Monitor 3.4(以下简称MNM)工具来观察网络传输层事件,如果您已经安装MNM,请跳过该准备工作部分。
首先,我们从微软官网下载MNM,根据需要下载对应的版本,我们这里下载64 bit版本,NM34_x64.exe。
接下来,安装MNM,直接执行NM34_x64.exe,然后按照向导完成安装。
最后,重启OS。

启用SSL证书之前

在启用SSL证书加密之前,客户端和SQL Server服务端的网络传输层默认没有加密保护的,我们可以通过如下步骤验证。
 创建测试表
 新建MNM抓取
 连接查询测试
 MNM中检查
 动态视图查看加密状态

创建测试表

为了测试方便,我们首先创建测试表CustomerInfo,存入三个客户敏感信息,包含客户名称和客户电话号码。

USE [TestDb]
GO
IF OBJECT_ID("dbo.CustomerInfo", "U") IS NOT NULL
    DROP TABLE dbo.CustomerInfo
CREATE TABLE dbo.CustomerInfo
(
CustomerId        INT IDENTITY(10000,1)    NOT NULL PRIMARY KEY,
CustomerName    VARCHAR(100)            NOT NULL,
CustomerPhone    CHAR(11)                NOT NULL
);

-- Init Table
INSERT INTO dbo.CustomerInfo 
VALUES ("CustomerA","13402872514")
,("CustomerB","13880674722")
,("CustomerC","13487759293")
GO

新建MNM抓取

打开MNM,点击New Capture,然后Start,启动网络层时间抓取。
01.png

连接查询测试

从客户端,连接上对应的SQL Server,执行下面的查询语句,以便观察MNM抓取情况。

USE [TestDb]
GO
SELECT * FROM dbo.CustomerInfo WITH(NOLOCK)

执行结果如下:
02.png

MNM中检查

我们仔细观察MNM中的事件,发现在客户机和SQL Server服务端的网络传输层,使用的明文传输,如下截图:
03.png
从图中右下角红色方框中,我们可以清清楚楚的看到了这三个客户的姓名和对应的手机号码,我们使用MNM看到数据在网络传输层以明文传送,并未做任何加密,可能会存在数据被窃听的风险。

动态视图查看连接状态

当然,您也可以从SQL Server的连接动态视图看出,连接并未加密:
04.png

从MNM和SQL Server动态视图我们可以得出相同的结论是:客户端和SQL Server服务端数据在网络传输层默认以明文传送,并未加密传输,可能会存在数据被窃听的风险。那么,我们可以启动SSL证书来加密数据传输,以达到更为安全的目的。

启用SSL证书

启动SSL证书,分为以下几个部分:
 证书申请
 强制所有连接使用SSL
 加密特定客户端连接

证书申请

Start –> 输入:mmc.exe -> File -> Add/Remove Snap-ins -> Certificate -> add -> Computer account -> Next -> Local Computer -> Finish -> OK
05.png
展开Certificates -> 右键 Personal -> 选择 All Tasks -> 选择Request New Certificate -> 点击 Next -> 选中 Computer -> 点击Enroll -> 点击Finish。
右键点击对应证书 -> 选中All Tasks -> 选择Manage Private Keys… -> 授予 read 权限给本地账号NT ServiceMSSQLSERVER。

强制所有连接使用SSL

强制所有连接加密

在SQL Server服务器上,Start -> Run -> sqlservermanager13.msc -> 右键点击Protocols for MSSQLSERVER -> Flags中将Force Encryption设置为Yes -> Certificate选项卡中选择证书 -> OK
06.png

重启SQL Service

强制所有连接设置完毕后,如果想要立即生效,请重启SQL Service。 
注意:
这里需要特别注意,如果是目前线上正常运行的应用,请慎重测试后,打开强制所有连接使用SSL。

加密特定客户端连接

当然,您也可以不用打开强制所有的连接使用SSL,转而使用加密特定的客户端连接,这里以SSMS连接工具为例。

客户端导入证书

Start -> Run -> 输入:certmgr.msc -> 右键选择Trusted Root Certification Authorities -> All Tasks -> Import
07.png

选择SQL Server服务端生成的证书文件
08.png

Next -> Finish -> OK

SSMS启用加密连接

在SSMS连接服务端界面 -> 选择Options
09.png

然后选择Encrypt connection
10.png

然后,参照“连接查询测试”中方法进行连接测试。同样在连接管理视图中查看,我们可以看到连接已经加密:
11.png

至此,使用SSL证书加密加密客户端和SQL Server服务端连接的实验成功。

注意事项

由于使用了SSL证书来加密客户端和SQL Server服务端连接,在提升数据通信的安全性同时,加密解密操作也会导致网络连接响应时间增加和CPU使用率上升,对业务系统有一定的性能影响。因此,建议您仅在外网链路有加密需求的时候启用SSL加密,内网链路相对较安全,一般无需对链路加密。

最后总结

本期月报我们分享了如何启用SSL证书,来加密客户端和SQL Server服务端连接,提升网络传输层通信安全,使得数据在传输过程中被加密后,以密文传送,最大限度保证了链路安全。

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MSSQL - 最佳实践

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MSSQL - 最佳实践

MSSQL - 最佳实践 - 使用SSL加密连接author: 风移摘要在SQL Server安全系列专题月报分享中,往期我们已经陆续分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥实现SQL Server列加密、使用混合密钥实现SQ
MSSQL - 最佳实践
2016-06-06

PHP 安全最佳实践

php安全最佳实践包括:输入验证,如使用filter_sanitize_*过滤数据。xss防御,如使用htmlspecialchars()转义输出。sql注入防御,如使用预处理语句。弱口令检查,如使用密码哈希函数。使用安全框架,如larav
PHP 安全最佳实践
2024-04-30

MySQL 的 20+ 条最佳实践

数据库操作是当今 Web 应用程序中的主要瓶颈。 不仅是 DBA(数据库管理员)需要为各种性能问题操心,程序员为做出准确的结构化表,优化查询性能和编写更优代码,也要费尽心思。 在本文中,我列出了一些针对程序员的 MySQL 优化技术。 在我
2022-05-10

Golang接口的最佳实践

在Golang中,接口是一种定义对象行为的类型。接口提供了一种方式来指定对象应该具有的方法,并且让不同的类型实现这些方法。使用接口能够使代码更加灵活和可扩展,同时也符合面向对象编程中的多态性原则。在实际应用中,如何设计和使用接口是非常重要
Golang接口的最佳实践
2024-02-24

MyBatis ORM代码最佳实践

MyBatis是一个流行的Java持久层框架,它允许你使用原生SQL进行数据库操作。以下是MyBatis ORM代码的最佳实践:使用Mapper接口和XML文件分离SQL和Java代码:将SQL语句与Java代码分离,可以提高代码的可读性和
MyBatis ORM代码最佳实践
2024-09-15

HTML Noscript标签:最佳实践

HTML Noscript标签提供了在浏览器不支持脚本的情况下显示替代内容的解决方案。本文将讨论Noscript最佳实践,包括兼容性、性能、语义和可访问性等。
HTML Noscript标签:最佳实践
2024-02-06

Oracle实例管理及最佳实践

Oracle实例管理及最佳实践在Oracle数据库管理中,Oracle实例是非常重要的概念之一。Oracle实例是Oracle数据库的运行环境,每个数据库实例管理一个数据库,它包含了内存结构、进程结构和数据存储结构。在实际应用中,合理管理
Oracle实例管理及最佳实践
2024-03-08

Android异常处理最佳实践

一个好的app 异常处理机制 我认为应该至少包含以下几个功能: 1.能把错误信息上传到服务器 让开发者可以持续改进app 2.错误信息至少应该包含 是否在主进程 是否在主线程 等可以帮助程序员定位的信息 3.最好包含手机硬件及软件信息。
2022-06-06

Uniswap V4 Hook 最佳安全实践

Uniswap V4 Hook 最佳安全实践 近期 Uniswap Lab 官宣了下一代 AMM Uniswap V4 的开发进展,并公开了白皮书和代码仓库。这次 V4 的白皮书仅仅只有 3 页,原因是 V4 并没有对 AMM 的核心算法逻
2023-08-30

PHP 代码重构最佳实践

答案:php 代码重构遵循提高解耦性、可读性、可维护性、减少复杂性的原则。实践:使用命名空间组织代码。用依赖注入容器解耦组件。重构冗余代码。分解大型类。使用现代代码风格。PHP 代码重构最佳实践简介代码重构是保持代码库健康和可维护性的关
PHP 代码重构最佳实践
2024-05-06

golang函数最佳实践详解

遵循 go 函数最佳实践可以编写高效、可维护的函数,具体包括:1. 保持函数简洁;2. 使用命名参数;3. 返回多个值;4. 处理错误;5. 使用文档注释。Go 函数最佳实践详解在 Go 中编写高效、可维护的函数至关重要。遵循最佳实践有助
golang函数最佳实践详解
2024-04-27

Hadoop集群部署最佳实践

在部署Hadoop集群时,以下是一些最佳实践:使用自动化工具:使用自动化工具如Ansible、Chef或Puppet来部署Hadoop集群可以减少手动操作和避免配置错误。使用容器化技术:使用容器化技术如Docker来部署Hadoop集群可以
Hadoop集群部署最佳实践
2024-02-29

golang函数命名最佳实践

go 中函数命名最佳实践:函数名称应明确描述其功能,避免模糊或抽象。采用动词-名词形式,动词描述操作,名词表示结果。使用蛇形命名法,单词间用下划线分隔。包成员函数首字母大写,遵循驼峰式。避免使用缩写,复杂的名称可使用复合词或分隔符。避免使用
golang函数命名最佳实践
2024-04-26

NodeJS 错误处理最佳实践

NodeJS 是一种基于事件驱动、异步 I/O 的开放源代码服务器端 JavaScript 运行时环境。它的高效性和可扩展性使得 NodeJS 成为了许多企业级 Web 应用的首选技术。然而,像所有其他软件一样,NodeJS 应用程序也无法完全避免出现错误和异常。为了提高代码的健壮性和可靠性,正确地进行错误处理是非常重要的。本文旨在提供一些 NodeJS 错误处理的最佳实践,帮
2023-05-14

Hadoop数据治理最佳实践

Hadoop数据治理是确保Hadoop集群中的数据质量、安全性和可用性的过程。以下是Hadoop数据治理的最佳实践:定义数据治理策略:制定明确的数据治理策略,包括数据质量标准、数据安全政策、数据备份和恢复策略等。数据分类和标记:对数据进行分
Hadoop数据治理最佳实践
2024-02-29

编程热搜

目录