问题标签 [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.
sql - Azure 中的 Always Encrypted SQL Server 2016 超时
我有一个有几个加密列的表。数据库和 Web 应用程序都托管在 Azure 上。如果我在本地运行 Web 应用程序,则代码可以正常工作,并且我可以按预期从表中获取解密数据。但是,当我将 Web 应用程序发布到 Azure 时,当应用程序尝试从加密表中读取时,我会遇到超时。加密密钥存储在 Azure Key Vault 中。我在连接字符串中使用带有“列加密设置 = 已启用”设置的实体框架。
有任何想法吗?
c# - Dapper 将 C# 十进制转换为 SQL 十进制而不是金钱(始终加密)
使用 Dapper 保存旨在进入 AlwaysEncrypted 货币字段的十进制数据会导致此错误:
操作数类型冲突:用 (...) 加密的小数 (5,1) 与用 (...) 加密的钱不兼容
您如何明确告诉 Dapper 使用 money 作为 C# Decimal <-> Money 作为首选映射的类型?
栏目详情:
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 是否支持此方案并始终加密?
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”参数没有区别?
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 返回。
如果我们按照上面的方法进行,我们需要进行 2 轮插入数据。我有由 Worksheet ExportDataTableAsString 返回的数据表对象。当我直接使用 SQLbulkcopy 的数据表时,我得到证书丢失错误。
有人可以帮我解决这个问题并提出更好的方法。
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) 在大于运算符中不兼容。
我尝试了这些,但效果不佳:
我们不能声明变量,因为它是视图。这种视图正在许多存储过程中使用。
任何想法表示赞赏。
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')(或更弱)。
任何帮助表示赞赏。
sql - 执行列级加密后重新调整列大小(始终加密)
我正在尝试在 sql-azure 数据库中进行列级加密。当加密成功完成时,我观察到列大小正在被修改;实际上减少了,令人惊讶的是,在其他根本没有加密的表列中。
示例:对“table:A”执行加密,但在“table:B”中,列大小会自动从 nvarchar(500) 减少到 nvarchar(100)。
这是什么原因?
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(列加密)而对我们的代码进行最小的更改?
我已经给出了示例存储过程代码和该存储过程的执行。
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