始终加密 - SQL Server 2016 如何在加密列上使用用户案例语句

Posted

技术标签:

【中文标题】始终加密 - SQL Server 2016 如何在加密列上使用用户案例语句【英文标题】:Always encrypted - SQL Server 2016 How to user case statement on encrypted columns 【发布时间】:2017-04-05 15:47:51 【问题描述】:

我已经使用 SQL Server 2016 中的始终加密功能对现有表列进行了加密。我现有的查询很少失败,因为我们在 where 子句、LEN 和子字符串函数中使用了 case 语句。有人可以告诉我如何在始终加密的列上使用这些函数。我收到以下错误 -

子字符串(SSN,2,5)

列/变量“SSN”的加密方案不匹配。列/变量的加密方案是 (encryption_type = 'DETERMINISTIC', e... 期望它是 (encryption_type = 'PLAINTEXT') (或更弱)。

【问题讨论】:

【参考方案1】:

目前,加密列不支持 like、Len 或其他字符串函数。 Always Encrypted 支持两种类型的加密方案:

确定性:支持相等运算随机化:不支持任何运算

确定性加密总是为任何给定的纯文本值生成相同的加密值。使用确定性加密允许对加密列进行点查找、等式连接、分组和索引。但是,但也可能允许未经授权的用户通过检查加密列中的模式来猜测有关加密值的信息,特别是如果存在一小组可能的加密值,例如 True/False,或 North/South/East/West 区域。确定性加密必须对字符列使用具有 binary2 排序顺序的列排序规则。

随机加密使用一种以较不可预测的方式加密数据的方法。随机加密更安全,但会阻止对加密列的搜索、分组、索引和连接。

希望对您有所帮助,如果您还有其他问题,请在 cmets 部分发布

【讨论】:

谢谢尼基尔。我使用的是确定性加密类型,我同意上面的说法,但是如果我们必须在过程中使用类似 len 或字符串相关的函数,那么如何在 SQL 过程中实现呢? 很遗憾,目前加密列不支持 like、Len 或其他字符串函数。 Nikhil,你们有计划在下一个版本中支持通配符搜索和 SQL 聚合功能吗?

以上是关于始终加密 - SQL Server 2016 如何在加密列上使用用户案例语句的主要内容,如果未能解决你的问题,请参考以下文章

ASP MVC 应用程序中的列加密与使用 .net Core / EF Core 的 SQL Server 2016

使用Node.JS和SQL Server始终加密插入数据库时 出错

您如何确定 sql server 实例是不是是“始终在线”副本?

SQL Server 2016 TDE:“DB_name”的数据库加密扫描已中止

SQL Server 始终开启 - 辅助索引

始终加密 - 创建证书错误 windows server 2012