问题标签 [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-server - 在 SQL Server 2016 中连接始终加密的列
我正在尝试连接 SQL Server 2016 中始终加密的列,但出现以下异常。请帮忙...
错误信息如下:
sql-server - 网络服务或 AppPool 帐户的始终加密证书
我正在尝试将 Always Encrypted 应用程序部署到 Amazon AWS。有一个 2016 RDS 数据库和一个托管 ASP.NET 4.6 应用程序的 Windows Server 2016。
在 Windows Server 上,当应用程序在网络服务或应用程序池标识下运行时,我们得到我很确定是这个确切的问题。
我们的错误:
System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
- 我们尝试了该帖子中的解决方案,但没有成功
- 我们尝试了这篇文章中的解决方案,但无法让 powershell 脚本返回除运行时异常之外的任何内容。我对powershell不是很熟悉,所以也许我不明白这个脚本。
- 如果我们将证书导入到 Andministrator 帐户,并使用管理员帐户运行 IIS 应用程序池,那么一切正常(不是连接问题或任何问题)
- 我们尝试将证书导入本地计算机“个人”证书并让应用程序帐户完全控制密钥
- 我们尝试将证书导入本地计算机受信任的根证书颁发机构(如 as/o post 中的建议)。
- 我们尝试使用“runas”为 DefaultAppPool 和网络服务帐户运行 certmgr,但是当提示输入密码时不知道那会是什么(空白密码不起作用)。我什至按照此处的建议查找了 DefaultAppPool 密码,根据该输出,密码为空。
到目前为止,没有任何工作(除了以管理员身份运行应用程序),我们不知道下一步该尝试什么。对于某种“Microsoft 官方部署指南”,我们已经看过了很多次,但所有这些都是关于如何让 Always Encrypted 在本地开发环境中工作的教程,而不是关于服务器部署的教程。
sql-server - EF 6.1.3 需要更多时间(几分钟),但 SSMS 17 会在一秒钟内执行 - 带有加密列的 SQL Server 2016(AlwaysEncrypted)
带有 EF 6.1.3 的 .NET Core REST API 作为 targetFramework 在 net452 上运行,需要几分钟来执行过程并将结果返回给模型,但使用相同的 SP 参数,在 SSMS 17 中执行只需一秒钟。它是 SQL Server 2016具有少量加密列并具有 30k+ 记录 (DEV) 的数据库。
最初我得到 SQL 超时 - 现在通过 在appsettings.DEV.json中设置连接超时来解决,还通过在上下文的构造函数上设置以下命令超时将命令超时增加到无限:
/li>在 SSMS 17 中,关闭 - 设置 ARITHABORT以重现这种缓慢但无法重现 - 它在有/没有 ARITHABORT 标志的情况下在一秒钟内执行。SP 只做 SELECT(因为它有 AE 列,所以只对它执行相等条件)
c# - 如何从 C# 客户端创建始终加密的列加密密钥
我看到关于 SQL Server 2016 的 Always Encrypted 功能的各种文章都描述了使用 SQL Server Management Studio UI 或使用New-SqlColumnEncryptionKey powershell 命令创建列加密密钥。但是如果 C# 客户端应用程序本身想要创建列加密密钥怎么办?这个ENCRYPTED_VALUE
专栏的格式是什么?
c# - SQL Server 在插入时始终加密排序规则不兼容
我有一个已经运行了很长时间的 Windows 窗体应用程序,现在我必须加密/解密数据库中的某些列。我在我的数据库上进行了所有配置,将我的列配置为加密,将列的数据类型更改为nvarchar(max)
from varchar(max)
,在 Windows 商店创建证书,为客户端导出证书,现在我正在尝试在客户端完成这项工作。
我将 Windows 窗体应用程序框架更改为 4.6,添加Column Encryption Setting=enabled
到我的连接字符串,更新了.dbml
设计器,但尝试插入值时仍然出现以下错误:
操作数类型冲突:varchar(8000) 使用 (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = 'MCM_V2') collation_name = 'Greek_CI_AS' 与 varchar(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 = 'mydb') collation_name = 'Greek_BIN2'
我正在使用 Linq 进行查询
asp-classic - 将 SQL Server Always Encrypted 与经典 ASP 一起使用
我们有一个很久以前使用经典 ASP 编写的业务应用程序。现在我们想利用 SQL 2016 的 Always Encrypted 功能。从这篇文章中,我看到我唯一的选择是使用 Microsoft ODBC 驱动程序 13.1,但是使用 VB 脚本并不能很好地支持这一点,因为并非所有数据类型都有效。
除了重写整个应用程序之外,还有另一种使用 Always Encrypted 和经典 ASP 的方法吗?
是否会在驱动程序的某些未来版本中添加支持?
c# - 始终加密:无法使用密钥存储提供程序解密列加密密钥:“MSSQL_CERTIFICATE_STORE”
我在我的 Web 应用程序中执行始终加密,它通过由窗口服务托管的 WCF 服务插入数据。将数据插入加密列时出现以下错误。
无法使用密钥存储提供程序解密列加密密钥:“MSSQL_CERTIFICATE_STORE”。加密列加密密钥的最后 10 个字节为:'64-56-87-3B-EC-2E-11-9D-2A-B5'。在证书位置“CurrentUser”的证书存储“My”中找不到带有指纹“A0D10777759BBD947EEA6F3F5D1A7989514C45F0”的证书。验证数据库中主密钥定义列中的证书路径是否正确,并且证书已正确导入到证书位置/存储中。参数名称:masterKeyPath
entity-framework - 在实体框架 [code first] 数据库上使用始终加密
我有一个首先使用实体框架/代码的 MVC 应用程序。我正在尝试设置始终加密以加密列(社会安全号码/ SSN)。我在 Azure 中运行一切,包括使用 Azure 保管库来存储密钥。
我有两个模型,SystemUser 和 Person。SystemUser 本质上是一个可以管理 1 个或多个 People 的帐户/登录名。
定义看起来有点像:
我有一个非常基本的页面设置,它只是查找用户并打印出他们的 SSN。这行得通。然后我调整了页面以更新 SSN,这也有效。这对我来说意味着 Always Encrypted 配置和 Azure Vault 设置正确。我在连接字符串中有“列加密设置=启用”,我使用 SSMS 加密了列 SSN(我正在使用确定性)。
在我的 SystemUser 类中,我有以下方法作为 Identity 的实现:
这用于用户登录。运行代码会导致:
System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参阅内部异常。---> System.Data.SqlClient.SqlException:操作数类型冲突:varchar 与使用 (encryption_type = 'DETERMINISTIC',encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name = 'CEK_Auto11',column_encryption_key_database_name = 'xxx' 加密的 varchar(30) 不兼容) collation_name = 'Latin1_General_BIN2'
它似乎在“if (this.People.Any())”上面的行上失败了。在该行之前放置一个断点会显示有关 this.People 的以下内容:
'((System.Data.Entity.DynamicProxies.SystemUser_9F939A0933F4A8A3724213CF7A287258E76B1C6775B69BD1823C0D0DB6A88360)this).People' 引发了类型为 'System.Data.Entity.Core.EntityCommandExecutionException' System.Collections.Generic.HashSet {System.Data.Entity.Core.实体命令执行异常}
这里有什么想法吗?我是否在做 Always Encrypted 不支持的事情?
sql-server - SQL Server Always Encrypted Operand 类型冲突:运行 EXEC sproc 时 varchar 与 varchar(60) 不兼容
我无法执行一个存储过程,该存储过程使用 Always Encrypted 来更新具有加密列的表。但是,我可以从存储过程中复制 SQL 并使用参数集将其作为常规 SQL 运行,只是无法在通过 SSMS 中的 EXEC 函数执行存储过程时触发存储过程,这也会导致应用程序出现问题
该表上有一个触发器,该触发器插入到另一个结构相似的审计表中,该审计表也使用相同的加密方式进行了加密。我做了通常的事情:
表:
存储过程:
使用参数集运行存储过程代码很好,但我无法执行存储过程:
我在一个带有 VARCHAR(60) 的测试数据库中为加密列、触发器和审计表创建了一个类似的表,它在那里工作正常,我在表/存储过程/触发器中找不到任何允许它工作的差异那里而不是这里。我几乎用尽了我能找到的其他帖子和博客。