使用 Visual Studio 数据库项目 (SSDT),我向现有表添加了一个新列。我正在使用 Always Encrypted 来加密各个列。当我添加列并尝试发布时,我在 Visual Studio 中看到一个弹出窗口,显示“值不能为空。参数名称:reportedElement”。
如果我不加密该列,它就可以工作。
如果我从表中清除现有数据,它就可以工作。
但是只是尝试添加一个新的可为空的加密列并不会发布。它甚至不会生成将应用的脚本。
我运行了 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/