sql-server - "Value cannot be null. Parameter name: reportedElement"将新的 Always Encrypted 列添加到现有表时

标签 sql-server visual-studio-2017 sql-server-data-tools always-encrypted

使用 Visual Studio 数据库项目 (SSDT),我向现有表添加了一个新列。我正在使用 Always Encrypted 来加密各个列。当我添加列并尝试发布时,我在 Visual Studio 中看到一个弹出窗口,显示“值不能为空。参数名称:reportedElement”。

如果我不加密该列,它就可以工作。
如果我从表中清除现有数据,它就可以工作。
但是只是尝试添加一个新的可为空的加密列并不会发布。它甚至不会生成将应用的脚本。

Visual Studio Error

我运行了 daxFX 和 SSDT 日志记录并使用 Windows 事件查看器查看了日志,但我只看到相同的错误“值不能为空。参数名称:reportedElement”。

这就是添加的列定义的样子。

[MyNewColumn] INT ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [DefaultColumnEncryptionKey], ENCRYPTION_TYPE = DETERMINISTIC, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL

我希望 Visual Studio 能够成功发布,添加我新的可为空的加密列,但实际行为是一个弹出窗口,指出“值不能为空。参数名称:reportedElement”。

最佳答案

我遇到了完全相同的问题,除了我解密了该列以执行基于它的查找,而我在加密时无法进行查找(这是一个本地开发数据库)。
解决方案是通过 SSMS 手动执行加密,然后运行发布。我不确定为什么 VS 无法发布更改,加密 key 存储在本地证书存储中并且 VS 以管理员身份运行,但它可能无法访问 key 来加密数据,但 SSMS 可以。

关于sql-server - "Value cannot be null. Parameter name: reportedElement"将新的 Always Encrypted 列添加到现有表时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55924997/

相关文章:

c# - 如何将 sqlparameter 传递给 IN()?

.net-core - 如何防止 nuget 在 Visual Studio 2017 中打开解决方案后冗余恢复包

c - printf 的格式化

visual-studio - ESLint 支持 Visual Studio 2017

sql-server - 如何修复从 Visual Studio 到 Azure VM 中部署到 SQL Server 2014 的缓慢问题

sql-server - SSRS多值参数-实现过滤器的适当层

java - 从 Java 类内部调用存储过程并写入控制台?

c# - 有什么方法可以使此查询更快并在循环外构建 where 子句吗?

visual-studio-2012 - 在数据库项目 vs2012 中更改数据库架构名称

visual-studio-2012 - 为什么我的 SqlPackage DeployReport 返回空报告?