AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 181830
Accepted
Molenpad
Molenpad
Asked: 2017-07-27 01:15:28 +0800 CST2017-07-27 01:15:28 +0800 CST 2017-07-27 01:15:28 +0800 CST

SQL Server 端到端加密选项

  • 772

我熟悉 SQL Server 的数据库加密选项,例如 TDE,并确保备份/备份位置得到正确加密和保护。

我正在为一个新客户做一些工作,他要求我详细说明端到端加密的选项,换句话说,以确保从数据库服务器发送到应用程序服务器的数据在途中保持加密并且不能被拦截(或者更确切地说,解释) 通过任何类型的数据包监控。

我知道使用 SSL 证书来加密与数据库的连接,尽管这是我很少配置的。I really don't know if that is an adequate option for end to end encryption as surely this cannot be configured using SQL Server alone?

在我看来,应用程序端或网络路由上必须有一些东西可以实现这样的端到端加密?

我对网络安全的了解基本上仅限于防火墙规则和一般路由,因此我正在寻找可供我进一步研究或付诸实践的选项。

我担心这个问题将被关闭,因为它是基于意见的,所以我真的要求在 SQL Server 本身(或在 DBA 的职权范围内)提供可靠的选项来配置数据的端到端加密。

sql-server sql-server-2014
  • 3 3 个回答
  • 5894 Views

3 个回答

  • Voted
  1. Best Answer
    Nikhil Vithlani - Microsoft
    2017-08-16T09:57:51+08:002017-08-16T09:57:51+08:00

    SQL Server 中的 Always Encrypted 功能,这是一种客户端加密技术,旨在提供端到端加密,这意味着它将加密客户端应用程序驱动程序中的数据。这意味着数据将在客户端和 SQL Server 之间的网络上加密,在 SQL Server 的内存中加密,在磁盘上加密。如果实施正确,它还可以保护数据免受在 SQL 服务器计算机上获得管理员权限的入侵者(如果您的数据在云中,则为云管理员)

    粗略地说,Always Encrypted 提供以下安全保证,纯文本数据将仅对有权访问 ColumnMasterKey(证书/AKV 密钥/基于 HSM 的密钥等)的实体可见


    为了详细说明,请考虑以下场景。

    考虑两台机器:

    • MachineA:运行 SQL Server 的机器
    • MachineT:客户端机器。

    考虑两个用户

    • UserA(这在技术上可以是一组用户,但为了简单起见,我将考虑使用单个用户的场景):谁是MachineA上的管理员,管理 SQL Server,并且是 SQL Server 上的 SysAdmin。但是,userA对MachineT没有任何类型的访问权限,并且UserA不应该能够解密存储在机器 A 上的 SQL Server 中的任何加密数据(加密数据,在此答案的上下文中是使用的 Always Encrypted 功能加密的数据SQL 服务器)。

    • UserT(这在技术上可以是一组用户,但为了简单起见,我将考虑使用单个用户的场景):是受信任的用户,可以访问MachineT ,可以访问托管在 SQL Server 上的数据库db中的所有数据机器A。此外,由于用户 T是受信任的,他/她应该能够解密加密数据。

    考虑在MachineA上运行的 SQL Server具有数据库 db和表 t。

    我们的目标是保护属于表t的列,例如ssnCol,这样只有userT应该能够以明文形式看到ssnCol。

    可以使用以下步骤来实现上述目标。

    • UserT登录到MachineT。
    • UserT在MachineT中打开 SSMS 。
    • UserT连接到MachineA上的 SQL Server
    • UserT使用本文部分提到的步骤加密表 t 中的ssnColEncrypt columns (configure Always Encrypted)
    • 在这一步之后,列ssnCol将被加密。

    当userT以上述方式 加密ssnCol时,会生成两个密钥

    • CMK:CMK 又名列主密钥是用于加密 CEK/s 的密钥。此密钥存储在MachineT的 Windows 证书存储中。
    • CEK:CEK 又名列加密密钥是用于加密ssnCol的密钥,此密钥以加密形式存储在MachineA上的 SQL Server 中,并且不会以明文形式保存在任何地方。

    因此,为了解密ssnCol,需要 CEK,然而,为了解密 CEK,需要 CMK。

    由于 CMK 在 machineT 的 Windows 证书存储中,因此只有userT可以访问 CMK、解密 CEK 和解密ssnCol。

    userA是machineA上的管理员,也是 SQL Server 上的 SysAdmin,但由于他/她无权访问 CMK,因此userA无法以明文形式访问ssnCol。您可以通过使用MachineA中的 SSMS 、以userA身份登录并查询ssnCol来验证这一点

    如果您还有其他问题,请在评论部分提出,我可以回答。

    • 5
  2. CaM
    2017-08-05T05:07:03+08:002017-08-05T05:07:03+08:00

    你是对的; SSL 是支持动态数据加密的官方手段。

    Microsoft SQL Server 可以使用安全套接字层 (SSL) 来加密通过网络在 SQL Server 实例和客户端应用程序之间传输的数据。SSL 加密在协议层 ( technet )内执行

    Always Encrypted 更深一些。它在传输之前在客户端应用程序中加密数据,并且从不以任何未加密的方式存储它。因此,通过 Always Encrypted 加密的数据在传输和静止时是“安全的”(存储为加密数据),但数据包本身并未在网络级别加密。(微软文档)

    因此,如果您想阻止您的 DBA 和/或报告编写者查看明文数据(例如信用卡号或社会保险号),那么 Always Encrypted 是获得该级别安全性的可能工具。

    但是,如果您不想让数据包监控工具看到您的数据库用户名和密码,或者在从 DB 移动到应用程序时看到明文数据,那么您必须使用 SSL。

    • 4
  3. S4V1N
    2017-07-27T04:34:20+08:002017-07-27T04:34:20+08:00

    TDE(从 2008 年开始)是静态加密,这意味着无论谁试图在没有适当安全管理的情况下在其他地方恢复您的数据库,都是不可能的。尽管您仍然可以使用 3rd 方工具嗅探动态数据,但这是使用SSL 安全性或IPSEC解决的另一个安全问题。

    引入 SQL 2016,启用了Always Encrypted,这是您可能需要考虑的。它基本上加密静态和动态数据。

    • 3

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve