问题标签 [always-encrypted]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
768 浏览

entity-framework-6 - 如何将参数传递给返回多条记录的存储过程

如何将参数传递给使用 EF6 返回多条记录的存储过程 - DbContextSQL Server 2016 存储过程具有加密列?

使用 EF 6.1.3、SQL Server 2016 - AlwaysEncrypted(确定性)

几篇文章讨论了使用 ADO .NET 4.6 通过使用命令、参数对象来完成此任务,但我无法从我的 EF 中找到方法DbContext

0 投票
1 回答
1009 浏览

sql-server - 使用始终加密的十进制 (18,2)

我正在使用新的 SQL Server 2016 功能 - 始终加密。这是一种非常酷且简单的技术——但不适用于十进制类型。

当我插入一个值时,我收到这样的错误(ZP_Test- 我的数据库名称):

操作数类型冲突:使用 (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'ColomnKey', column_encryption_key_database_name = 'ZP_Test') 加密的小数 (4,2) 与使用 (encryption_type) 加密的小数 (18,2) 不兼容= 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'ColomnKey', column_encryption_key_database_name = 'ZP_Test')
无法准备语句。

我的 API 是用 C# 编写的,请看我的代码,也许你知道解决方案。

用于创建表的 SQL 查询

C# 代码示例

在 SQL 中跟踪,发生错误时 -

0 投票
1 回答
3164 浏览

sql-server - 如何对加密列执行“排序依据”(确定性加密 - SQL 2016)

如何对加密列执行“排序依据”(确定性加密 - SQL Server 2016)?

在 SSMS 2017 上执行时出现错误(需要 AE 设置)

lastName列定义如下:

我收到一个错误:

消息 33299,级别 16,状态 2,行 9
列/变量“lastName”的加密方案不匹配。列/变量的加密方案是 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'X', column_encryption_key_database_name = 'X') 并且行 '3' 附近的表达式期望它是 (encryption_type = ' PLAINTEXT')(或更弱)。

0 投票
1 回答
399 浏览

sql-server - SQL server 2016 总是加密证书停止工作,超时错误

昨天,始终加密的证书停止工作。这使我的申请陷入停顿。我从应用程序得到的唯一响应是timeout error

我有database一个用户表,其中pwd已加密。Web 服务器在应用程序池用户的个人证书存储中安装了始终加密的证书。直到应用程序突然无法检查登录详细信息,这一切都变得非常糟糕。

我通过以应用程序池用户身份打开 MMC 并单击当前商店上的刷新解决了该问题。User\Personal\Cerificates

还有其他人遇到过这个问题吗?如果是这样,您是如何解决的?比如,你是如何防止它再次发生的?

0 投票
0 回答
128 浏览

c# - Always Encrypted 有时在 IIS10 上有效

首先介绍一下背景;我们在 Windows Server 2016 上运行 IIS10,并且我们有一个 SQL 数据库,其中包含在运行 2016 的单独 SQL 服务器上使用 Always Encrypted 加密的列。有问题的应用程序是 C#.NET 中的 ASP MVC,使用通过包含Column Encryption Setting=Enabled参数的 Linq 的连接字符串。私钥位于 iis apppool\defaultapppool 的个人证书目录中,并且还放置在本地计算机中,并为应用程序池提供访问权限。

我已经确定,当我的机器(创建密钥的地方)访问该站点时,数据被解密,然后在所有其他连接上工作。但是,几分钟后我的机器没有连接,其他用户将收到有关证书不存在的错误。

我目前有一个计划任务每​​三分钟运行一次,以在 chrome 中加载站点以使其保持活动状态,但我想要一个永久的解决方案。

有任何想法吗?

0 投票
2 回答
112 浏览

sql-server - Azure SQL 中的始终加密(客户端加密)

我已经在我的项目中实现了 Always Encryption 方法,在知道它加密客户端代码中的数据并且从不向数据库引擎透露数据之后。

我在这里这里经历了一个清晰的想法,即加密/解密是在客户端级别(驱动程序)中完成的。

另外,我也已经在这个网站上发布了一个问题并得到了相同的答案。

虽然,我需要向我的官员证明,在数据库调用和客户端代码之间,数据将被加密。他们只是忽略了文档。

我应该如何向他们证明,在客户端和 SQL 服务器之间的网络中,数据是加密的而不是解密的?

我尝试使用进程监视器。但它似乎不起作用,它列出了 Visual Studio 执行背后的所有进程(主要是 DLL 调用)


我可以使用 Fiddler 进行监控吗?

0 投票
1 回答
666 浏览

sql-server - SQL 2016 Always Encrypted 列和 SQL 临时表 (#temp)

我们正在寻找一种解决方案来在数据库中实现“始终加密”的列,我们同时使用许多 SQL 临时表 (#tmp)。

我们探索了替代路径 - 停止使用 #temp 表,但这意味着在时间/成本方面对我们的应用程序产生很大影响。

有没有人找到一种方法来编写像“insert into #tmp select from my_table”这样的查询,其中 my_table 包含 AE 列?

我尝试将相同的 CMK 和 CEK 应用于 tempdb 数据库,以便可以为 #tmp 表创建与 my_table 的结构相同的结构。但这并不能解决问题 - 将表放在 2 个不同的数据库中似乎会阻止数据传输。

我正在寻找一个 SQL 解决方案,而不是一个涉及可以访问所有加密密钥的客户端应用程序(C#、vb 等)的解决方案。

0 投票
1 回答
244 浏览

encryption - 无法为 SQL Server 上的加密列应用 max()

我有一个表,其中包含datetime使用 SQL Server 2016 上的 Always Encrypted 功能加密的列。

现在我正在尝试执行这个简单的选择:

我遇到了这个错误:

消息 33299,级别 16,状态 2,行 5
列/变量“dt_order”的加密方案不匹配。列/变量的加密方案是 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'myColHML', column_encryption_key_database_name = 'TESTING') 并且行 '1' 附近的表达式期望它是 (encryption_type = ' PLAINTEXT')(或更弱)。

在 SSMS 中,我已经设置了连接选项“Column Encryption Setting=Enabled”,并且我还设置了查询选项“Enable Parametrization for Always Encrypted”

任何想法?

0 投票
1 回答
890 浏览

encryption - SQL Server 始终使用动态 SQL 加密

我正在使用 SQL Server 始终对 SSN 列的功能进行加密。我创建了一个存储过程并从 .net 代码中调用它。我在我的连接字符串中使用列加密设置=true。从 .net 代码调用动态存储过程会引发此错误:

操作数类型冲突:varchar 与使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'ColumnKey', column_encryption_key_database_name = 'DatabaseName') 加密的 varchar(4) 不兼容 collat​​ion_name = 'SQL_Latin1_General_CP1_CI_AS'

有人可以提供一个示例代码,该代码可以通过使用参数化搜索加密列来检索数据吗?

在应用程序中,SSN 号码使用随机加密进行加密。Last4SSNumber 使用确定性加密进行加密。搜索基于 SSN 号码的最后 4 位,过滤后的列表将仅获得最后 4 位匹配的 SSN 号码,其余所有数字在应用程序中被屏蔽。由于加密随机化和确定性都不支持类似操作,因此添加了 last4SSNumber 列。

当我从 .NET 代码中调用没有动态 SQL 的上述存储过程时,它工作正常,我能够检索匹配 SSN 的最后 4 位数字的列表。

在应用程序中有现有的存储过程,其中有很多参数传递给它们。搜索条件基于值是否传递给参数。Last4SSNumber 是传递的参数之一。我提供了一个简单的存储过程示例,而不是包含所有参数的整个存储过程。根据传递给参数的值构建搜索条件。

在各种帖子中已经指出,动态 SQL 必须转换为参数化查询才能使用始终加密的功能。我对上述存储过程应用了参数化,但在从 .NET 代码调用存储过程时仍然收到错误消息。

0 投票
1 回答
286 浏览

c# - 使用 C#/.NET 通过 KeyVault 为 SQL Azure 配置 Always Encrypted

我通过https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/configure-always-encrypted-keys-using-powershell(KeyVault + SQL Azure 设置)有一个工作脚本。现在我有了普通的 Azure PS(KeyVault 创建)、反射程序集(SMO、SqlClient、ConnectionInfo)和 SqlAzure 模块(列加密)。

长话短说 - 我可以在 C# 中完成所有这些吗?(我有一个使用流利管理库的现有工作流程,如果可能的话,我想避免使用 PS)。