当前位置: 首页 > news >正文

SQL Server 的透明数据加密

透明数据加密是SQL Server数据库安全众多特性中的一个,本文只针对透明数据加密。
在这里插入图片描述

在此测试之前,已经按照文档如何快速获得一个测试用SQL Server企业版创建了一个SQL Server 2019,并按照文档为SQL Server安装示例数据库AdventureWorks安装了样例数据库并导入了测试数据。

这里的SQL Server虽然是2019,但其他版本的SQL Server也是类似的,SQL Server从2016版开始支持透明数据加密。

操作非常简单,毕竟这是数据库内置的功能:

1> use master;
2> go
Changed database context to 'master'.
1> create master key encryption by password = 'Welcome1';
2> go
1> create certificate MyServerCert with subject = 'My DEK Certificate';
2> go
1> use AdventureWorks2019;
3> go
Changed database context to 'AdventureWorks2019'.
1> CREATE DATABASE ENCRYPTION KEY
2> WITH ALGORITHM = AES_256
3> ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
4> go
Warning: The certificate used for encrypting the database encryption key has not been backed up. You should immediately back up the certificate and the private key associated with the certificate. If the certificate ever becomes unavailable or if you must restore or attach the database on another server, you must have backups of both the certificate and the private key or you will not be able to open the database.
1> ALTER DATABASE AdventureWorks2019 SET ENCRYPTION ON;
2> go

以上的报警是提示你需要备份秘钥,略。

其实SQL Server的加密架构,和Oracle,和MySQL都是一样的。都是两层秘钥架构,即主密钥和加密密钥。

此时查看数据文件,发现都是乱码:

$ sudo strings /var/opt/mssql/data/AdventureWorks2019_Data.mdf|more
Jn9v5
Jn9v
g       4d
|%&z"
Jn9v5
Jn9v
g       4d
|%&z"
Jn9v5
Jn9v
g       4d
|%&z"
Jn9v5
Jn9v
g       4d
|%&z"
Jn9v5
Jn9v
g       4d
...$ sudo strings /var/opt/mssql/data/AdventureWorks2019_log.ldf |more
Jn9v5
Jn9v
Jn9v$
Jn9v
Jn9v
g       4d
|%&z"$
Jn9v
Jn9v
g       4d
|%&z"
...

查询加密状态:
在这里插入图片描述

解密:

1> use AdventureWorks2019;
2> go
Changed database context to 'AdventureWorks2019'.
1> alter database AdventureWorks2019 set encryption off;
2> go

解密后,探索数据文件,可以看到明码,包括数据库中存储的源代码:
在这里插入图片描述

参考

  • SQL Server 2019 透明数据加密
  • SQL Server 2022 透明数据加密
  • SQL Server 数据库安全
  • Database encryption becomes transparent with SQL Server TDE!
http://www.lryc.cn/news/418219.html

相关文章:

  • Windows图形界面(GUI)-MFC-C/C++ - 列表视图(List Control) - CListCtrl
  • 一机两用的简单介绍
  • uniapp离线打包热更新失败-AndroidStudio离线打包apk后无法下载打开-热更新失败-plus.runtime.install失败
  • 深植根基、蓬勃向上 | openKylin 2.0正式发布!
  • 【Material-UI】按钮组:尺寸与颜色详解
  • app抓包 burp配置
  • 图像与像素:利用ImageJ分析荧光显微镜图像|QuPath基础教程1|24-08-08
  • Prompt Fuzzer:用于增强 GenAI 应用程序的开源工具
  • Vision Pro使用GLFT 加载模型shader错误解决办法
  • Netty技术全解析:MessageToMessageCodec类深度解析
  • Three 【3D车模换肤】
  • 语言模型简介和Ngram模型(1)
  • MessageBox弹框替代系统自带的alert、confirm -- 高仿ElementUI MessageBox
  • 数据结构一排序算法
  • [Leetcode 215][Medium]-数组中的第K个最大元素-快排/小根堆/堆排序
  • 【栈和队列】常见面试题
  • 关于float浮点值二进制存储和运算精度损失的话题
  • python爬虫学习记录-请求模块urllib3
  • 谷粒商城实战笔记-133~135-城业务-商品上架-远程上架接口
  • 【React】详解 App.js 文件
  • 【ML】self-supervised Learning for speech and Image
  • 青岛实训day24(8/8)
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • 设计模式 由浅入深(待完结)
  • (第34天)645、最大二叉树
  • Python知识点:如何使用Paramiko进行SSH连接与操作
  • 代码随想录算法训练营第六天(一)|242.有效的字母异位词
  • 数据结构 | 考研代码题之顺序表 | 1 查找L中值为e的数据元素若找到则返回其下标,若找不到则返回-1
  • RLVF:避免过度泛化地从口头反馈中学习
  • 设计原则与思想-从项目实战中学习设计模式