这可能是一个常见问题,但我没有得到针对我的用例的具体答案。
我收到了在 Oracle DB 中存储大小为 40KB 的 JSON 对象的要求。我还需要在使用 RSA 存储之前对其进行加密..因此加密后的 JSON 将大于 40KB。
我做了研究,发现VARCHAR2数据类型最大大小是32K。所以我无法将数据存储在 VARCHAR2 数据类型列中。 Oracle 提供的下一个选项是 BLOB 或 CLOB 数据类型。
我的问题是..我应该选择哪一个?有一些帖子说对于字符数据选择 CLOB,对于二进制数据选择 BLOB。 Oracle 网站上的另一篇文章说对 JSON 数据使用 BLOB (https://docs.oracle.com/en/database/oracle/oracle-database/18/adjsn/overview-of-storage-and-management-of- JSON-data.html#GUID-26AB85D2-3277-451B-BFAA-9DD45355FCC7)
由于我有一个同样加密的 JSON,因此将其存储在 CLOB 中是否有意义,还是应该使用 BLOB?
加密 JSON(使用 RSA 或其他算法)会将其转换为原始二进制文件。一旦加密,Oracle(以及查看它的任何人)就无法判断它是 JSON,因此您应该遵循存储原始二进制数据的建议。您实际上总是希望将原始二进制文件存储为 BLOB。
不幸的是,这意味着您无法使用链接到的 Oracle JSON 开发人员指南中提到的许多功能,因为在您解密该列之前,Oracle 无法判断该列包含 JSON。
作为旁注,我确实想提一下 Oracle 的 TDE(透明数据加密),其他一些问题已经涵盖了。如果您使用 Oracle 的列加密而不是手动加密,您仍然可以利用 Oracle 的内置 JSON 支持(将其存储为 CLOB 或 BLOB、向列添加
is_json
检查约束、使用 JSON 函数等) 。不幸的是,我不相信您可以将 RSA 公钥加密与 TDE 结合使用,因此它仍然可能无法满足您的要求。