问题标签 [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 投票
2 回答
385 浏览

sql - Azure 中的 Always Encrypted SQL Server 2016 超时

我有一个有几个加密列的表。数据库和 Web 应用程序都托管在 Azure 上。如果我在本地运行 Web 应用程序,则代码可以正常工作,并且我可以按预期从表中获取解密数据。但是,当我将 Web 应用程序发布到 Azure 时,当应用程序尝试从加密表中读取时,我会遇到超时。加密密钥存储在 Azure Key Vault 中。我在连接字符串中使用带有“列加密设置 = 已启用”设置的实体框架。

有任何想法吗?

0 投票
1 回答
1326 浏览

c# - Dapper 将 C# 十进制转换为 SQL 十进制而不是金钱(始终加密)

使用 Dapper 保存旨在进入 AlwaysEncrypted 货币字段的十进制数据会导致此错误:

操作数类型冲突:用 (...) 加密的小数 (5,1) 与用 (...) 加密的钱不兼容

您如何明确告诉 Dapper 使用 money 作为 C# Decimal <-> Money 作为首选映射的类型?

栏目详情:

0 投票
1 回答
818 浏览

c# - 始终使用 Entity Framework 和 Includes 加密无法实现查询

我遇到了始终加密以与实体框架配合使用的问题。

我的目标是 .Net 4.6.1,已Column Encryption Setting=Enabled在我的连接字符串中启用,我可以成功拨打电话并使用

EncryptedTable 有 1 列使用确定性加密,数据类型为 Varchar(Max)。

DbContext 有 CodeFirst 支持

一旦我开始在我的 dbContext 上使用包含,事情就会开始变坏。

这有效

这会引发错误: Operand type clash: varchar is incompatible with varchar(max) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256',

对 2 个调用执行 SQL 配置文件可以看到第二个调用失败exec sp_describe_parameter_encryption

EF 是否支持此方案并始终加密?

0 投票
2 回答
1393 浏览

c# - SQL Server 2016 如何从命令行读取/写入始终加密的列?

我能够读取和写入始终从 C# ASP.NET 应用程序加密的列。但是,我需要从 sqlcmd 执行此操作。

经过一番研究,我在这里发现,您需要 -g 参数来激活列加密设置,并更新到 sqlcmd 版本 13.1,我这样做并使用“sqlcmd -?”进行了验证。

所以,我做了一个测试表:

并使用以下内容制作了一个 test.sql:

我这样调用 sqlcmd:

但无论我是否使用“-g”,我都会收到以下错误:

如果我将 test.sql 更改为:

然后我得到另一个错误(仍然有或没有-g):

我需要这个,因为目前有一个接受平面文件的 C# 应用程序,然后通过调用“.sql”文件通过命令行将其加载到数据库中。现在有些列需要加密。因此,我们需要 sqlcmd 来读取/写入加密列,以避免重写 C#.NET 中的所有逻辑。

难道我做错了什么?这甚至可能吗?为什么sqlcmd的“-g”参数没有区别?

0 投票
1 回答
614 浏览

always-encrypted - 具有始终加密列的 SqlBulkCopy

我正在通过 .Net 代码导入 CSV 并获取数据表中的数据并尝试使用 SqlBulkCopy 批量插入,但出现证书错误。当我尝试执行其他操作时,只有当我执行 SqlBulkCopy 时才会出现证书错误。这是错误描述

无法使用密钥存储提供程序解密列加密密钥:“MSSQL_CERTIFICATE_STORE”。加密列加密密钥的最后 10 个字节为:'7F-1D-20-E1-43-0B-B5-92-66-78'。在证书位置“CurrentUser”的证书存储“我的”中找不到带有指纹“XXXXXXXXXXXXXXXXXXXXXXXXXX”的证书。验证数据库中主密钥定义列中的证书路径是否正确,并且证书已正确导入到证书位置/存储中。参数名称:masterKeyPath

我在本地机器上做了证书导入。下面是我在 dt 数据表对象中有数据的代码。从 worksheet.Cells.ExportDataTableAsString 返回。

参考 - https://dba.stackexchange.com/questions/160577/is-it-possible-to-bulk-insert-data-into-a-table-that-has-columns-encrypted-with

如果我们按照上面的方法进行,我们需要进行 2 轮插入数据。我有由 Worksheet ExportDataTableAsString 返回的数据表对象。当我直接使用 SQLbulkcopy 的数据表时,我得到证书丢失错误。

有人可以帮我解决这个问题并提出更好的方法。

0 投票
1 回答
1202 浏览

sql-server - SQL Server 2016 始终加密 - 使用视图中始终加密的列进行比较和计算表达式

我有一个"Amount" numeric(18,2)使用 SSMS v17 的加密列向导加密的列。列数据现在已加密。

但是,我有一个使用类似的视图:

该列Rate的类型为numeric(18,8)

我无法创建此视图。它给出了数据类型不兼容的错误,因为一列是加密的,而另一列是明文。从我尝试过的各种排列中,我看到 > 0 的 Where 子句导致问题,并且 Select 列表中的 Amount*Rate 也不起作用。

相关的错误Amount*Rate是(我评论了 Where 子句)

操作数类型冲突:使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') 加密的 numeric(18,2) 与 numeric 不兼容

相关的错误Where Amount>0是(我在 Select 子句中评论了 Amount*Rate)

使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') 和 tinyint 加密的数据类型 numeric(18,2) 在大于运算符中不兼容。

我尝试了这些,但效果不佳:

我们不能声明变量,因为它是视图。这种视图正在许多存储过程中使用。

任何想法表示赞赏。

0 投票
1 回答
1014 浏览

sql-server-2016 - SQL Server 2016 - 是否可以连接两个 nvarchar 始终加密的列?

我使用以下方法创建了一个表:

使用以下方法插入了一些示例数据:

然后我使用始终加密向导使用 SSMS v17 加密此表的列。现在我正在尝试将名字与姓氏连接起来,如下所示:

它给了我以下错误:

操作数类型冲突:使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') 加密的 nvarchar(100) 与 varchar 不兼容

当我尝试这个时:

它给出以下错误:

列/变量“名字”、“姓氏”的加密方案不匹配。列/变量的加密方案是 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_database_name = 'SampleDB') 并且行 '1' 附近的表达式期望它是 (encryption_type = ' PLAINTEXT')(或更弱)。

任何帮助表示赞赏。

0 投票
1 回答
453 浏览

sql - 执行列级加密后重新调整列大小(始终加密)

我正在尝试在 sql-azure 数据库中进行列级加密。当加密成功完成时,我观察到列大小正在被修改;实际上减少了,令人惊讶的是,在其他根本没有加密的表列中。

示例:对“table:A”执行加密,但在“table:B”中,列大小会自动从 nvarchar(500) 减少到 nvarchar(100)。

这是什么原因?

0 投票
3 回答
13143 浏览

c# - 如何将值插入到 sql 2016 中其列始终加密的表中?

我使用列加密对 sql 2016 表中的几列进行了加密。现在我想将数据插入到该表中。我尝试创建一个存储过程并使用参数执行该过程,但出现以下错误。

列/变量“@lastName”的加密方案不匹配。列/变量的加密方案是 (encryption_type = 'PLAINTEXT') 并且行 '0' 附近的表达式期望它是 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = ' BROps_TestDB')(或更弱)。

另外,我有一个现有的应用程序,其中使用 SQL 2008 中的实体框架将值插入到表中(我们正在尝试升级到 SQl 2016 以获得始终加密功能)。那么,是否有任何标志或任何方法可以通过我们将数据插入 SQL 2016(列加密)而对我们的代码进行最小的更改?

我已经给出了示例存储过程代码和该存储过程的执行。

0 投票
1 回答
579 浏览

ssms - 始终使用 Azure Key Vault SSMS 清除错误加密

我正在尝试使用 Azure Key Vault 设置一个新的 Always Encrypted 数据库(我以前有这个工作)。在 SSMS 始终加密向导中,我可以选择要加密的表和列,但在选择“Azure Key Vault”作为密钥存储提供程序后出现问题。我登录后,窗口会短暂弹出下拉菜单,其中正确列出了我在 Azure 中的 Key Vault,但随后它立即消失,并出现一个警告三角形,旁边有“Purge”字样和“再试一次”按钮。始终加密错误

点击“详情”显示:在此处输入图像描述

任何想法这意味着什么以及如何让向导完成?

我已经在 2 个不同的 SQL 2016 安装上尝试了这个,结果相同,并使用来自不同机器的 SSMS。

我知道它说“我们在连接到 Azure 时遇到了问题”,但是由于它正在登录并(简要地)列出我的密钥保管库,连接问题可能是什么?

谢谢。


部分细节

====================================

我们在连接到 Azure 时遇到了问题(我们在连接到 Azure 时遇到了问题)

====================================

清除 (Microsoft.SqlServer.Management.ServiceManagement)


节目地点:

在 Microsoft.SqlServer.Management.ServiceManagement.ResourceManagement.AzureKeyVaultKeyPermissionEnumConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList 列表,JsonReader 阅读器,JsonArrayContract 合同,JsonProperty containerProperty,字符串 id)在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader 阅读器,类型 objectType,JsonContract 合同,JsonProperty 成员,对象现有值,字符串 id)

在此处添加 SSMS 版本详细信息: Microsoft SQL Server Management Studio 13.0.16106.4 Microsoft Analysis Services 客户端工具 13.0.1700.441 Microsoft 数据访问组件 (MDAC) 10.0.15063.0 Microsoft MSXML 3.0 4.0 6.0 Microsoft Internet Explorer 9.11.15063.0 Microsoft .NET Framework 4.0.30319.42000操作系统 6.3.15063