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 / 问题 / 187661
Accepted
Sri
Sri
Asked: 2017-10-05 07:02:37 +0800 CST2017-10-05 07:02:37 +0800 CST 2017-10-05 07:02:37 +0800 CST

在 SQL Server 2016 中结合始终加密和列级加密

  • 772

我们要求使用 SQL Server 2016 加密敏感列数据,并选择始终加密 (AE) 功能来使用确定性方法加密这些列。

由于 AE 确定性加密不允许对这些加密列进行不等式、范围或 LIKE 查询,因此我们尝试使用对称密钥(列级)加密技术对这些类型的列进行加密。

在某些列(不需要任何不等式、范围或 LIKE 查询)上实现 AE 功能并在需要生成不等式、范围或 LIKE 查询的列上实现对称密钥类型加密是一种好习惯吗?

考虑到性能、安全性和维护,将 AE 加密和列级加密结合在一个表上是否是一种好习惯?

请高手指教。

sql-server sql-server-2016
  • 1 1 个回答
  • 2395 Views

1 个回答

  • Voted
  1. Best Answer
    LowlyDBA - John M
    2017-10-19T10:59:35+08:002017-10-19T10:59:35+08:00

    我还没有遇到关于 SQL Server 的多种加密类型的明确“最佳实践”列表,但在您的情况下,我可能会推荐以下内容:

    1. 使用 Always Encrypt 加密必要的数据
      • 它的新热点。你在 2016 年,享受它!
      • 更好的安全性 - DBA 无法解密数据,因为密钥存储在数据库之外。
      • 用于调整单个查询和减少功能性能影响的更多选项。
      • 最容易在数据库和应用程序端实现(除非 TDE 是一个选项),因为您只需配置驱动程序参数,而不是像使用列级加密那样更改查询。
      • 额外的解密负载成为应用程序(特别是驱动程序)的问题(对于作为 DBA 的我来说很好)。
      • 这个功能很可能会改进和优化一段时间,因为它是一个新的(我的观点)。
    2. 对于您需要搜索的列,创建一个哈希值来进行查找。
      • 维护数据的安全性,但对于查找非常有效。它允许您在正常行上进行搜索,而无需解密每一行或默认为表扫描的开销。如果需要,您可以索引它以获得进一步的性能。
        • 您的应用程序将获取用户输入并对其进行哈希处理,然后使用该哈希值来查询存储在表中的哈希版本。此查找速度很快,并且只允许您解密所需的行,而不是解密您实际上不希望作为结果集一部分的行。
      • 其设计取决于您需要查找多少列,以及您在WHERE子句中是否使用多个或单独的列。
      • 只要您负担得起,额外的空间对于性能来说是值得的。
    3. 不要打扰使用列级加密
      • 您必须解密整个列才能进行搜索,这比未加密的哈希列效率低。这意味着您的表越大,此方法的效率就越低。100 万行意味着您必须花费 CPU 来解密一百万行,即使您的过滤器只返回 1 行。仅仅因为您可以执行搜索并不意味着它将是高效的。
      • 我可以看到在同一张表中长期维护两个加密功能令人困惑,并且充其量只是部落知识。

    您也可以使用列级加密来实现#2,但是如果没有任何限制,我不明白为什么您通常会选择 CLE 而不是 Always Encrypted。

    我开玩笑说让加密成为应用程序的问题,但我发现数据库经常背负着比大多数情况下更多的业务逻辑和古怪的功能。如果有一个选项可以将一些计算推回应用程序端,我发现这通常是最好的选择,并且有助于防止故障排除和一般调整成为一场噩梦。

    当然,您应该全面测试替代方案。如果您发现 CLE 或组合最适合您的特定场景,那就这样吧。


    补充阅读:

    • 始终加密的性能- Aaron Bertrand
    • 始终加密的性能 - 后续行动- Aaron Bertrand
    • 列级加密开销- Dallas Snyder
    • Always Encrypted(数据库引擎)(官方文档登录页面)
    • 10

相关问题

  • 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