使用 SQL-CLR 函数在 SQL Server 中验证加密数据的安全性

Posted

技术标签:

【中文标题】使用 SQL-CLR 函数在 SQL Server 中验证加密数据的安全性【英文标题】:Safey of Validating Encrypted Data in SQL Server using a SQL-CLR function 【发布时间】:2017-10-15 17:16:12 【问题描述】:

我有一个关于 SQL 加密的问题:与使用内置 SQL 加密选项相比,在应用程序代码 (C#) 中加密数据并将加密数据存储在数据库中的开销要少得多。

我喜欢这样:

    如果您在其他服务器上恢复数据库或使用 SQL 复制时,您不必担心确保能够解密数据。我知道你可以生成一个特殊的密钥来让你这样做,但是开销太大了。

    它将加密方法和加密数据完全分开。

验证用户密码是通过应用程序代码通过将用户输入与散列密码进行比较来完成的。我认为没有人需要运行查询来检查有多少用户拥有特定密码,所以我们很好。

另一方面,如果加密数据是信用卡#,则运行查询以了解特定卡的使用时间并不是一项不寻常的任务。

为了解决这个问题,我正在考虑使用 SQL-CLR 函数来验证加密数据。它将仅用于验证而不用于加密。

我想知道这有多安全,特别是如果我想创建一些存储过程,这些过程将传递这个用户函数以能够查询数据。

谢谢!

【问题讨论】:

“验证加密数据”是什么意思?您的意思是即时解密吗? 您是否考虑过性能影响?例如。你想在你的数据库等中创建索引吗?我强烈建议实施其中一种现有方法(在线查找教程),而不是自己重新发明***。有了安全性,很容易犯一个小错误,这将使您的所有努力都变得无声无息。这都是关于链条中最薄弱的环节。 【参考方案1】:

我认为您只是在询问 PCI 问题。为什么您需要知道何时使用特定卡?出于分析/报告或调查/争议/等目的。

您的商家处理器(根据帖子我假设您是商家)可能有办法在销售点标记实际卡号。该令牌仍将允许您进行分析/报告。

将加密数据存储在数据库中,这些数据在应用程序层进行加密,然后在数据库中提供一种解密方式,这可能会破坏加密的所有好处。

您能否在您的 C# 应用程序中加密卡号,然后使用已加密的值查询该数据库?

您能帮忙“验证加密数据”吗?

【讨论】:

以上是关于使用 SQL-CLR 函数在 SQL Server 中验证加密数据的安全性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用sql server数据库中的标量值函数

在存储过程 sql server 2005 中使用函数调用?

SQL Server 中的 BetaInv 函数

sql server中啥是聚合函数

sql server replace 函数使用方法

SQL Server性能优化使用SET函数