【发布时间】:2020-02-26 13:11:03
【问题描述】:
有没有什么方法可以在 oracle 中使用特定密钥加密 SQL 包(存储过程、函数等)并出于安全目的使用相同的密钥解密??? 我正在使用 oracle 12c....
谢谢,
【问题讨论】:
有没有什么方法可以在 oracle 中使用特定密钥加密 SQL 包(存储过程、函数等)并出于安全目的使用相同的密钥解密??? 我正在使用 oracle 12c....
谢谢,
【问题讨论】:
是的,您可以为此使用wrap 工具,请参阅PL/SQL Source Text Wrapping
您可以包装 PL/SQL 源文本,从而防止任何人使用静态数据字典视图 *_SOURCE 显示该文本。
原则上不支持解密,但可以使用Unwrap It!等工具。
【讨论】:
我喜欢 Wernfried 的回答。如果可以的话,我想扩大一点。
假设您将尝试 WRAP 方法(有人说容易破解),请尝试检查其有效性:
我从未测试过上述内容,但如果我正在考虑使用 WRAP,我会这样做,以便我知道它提供的任何保护的限制。鉴于 DBA 能够监控和调整查询的重要性,如果 SQL 至少无法通过标准性能视图/查询确定,我会感到惊讶。
另外请注意,如果您的代码有任何动态 SQL 或 PLSQL,这可能会显示在打包文件的符号表中(作为十六进制代码)。
我认为您不能包装 TRIGGER 代码(不过,您当然可以让触发器调用已包装的 PLSQL 过程)。
如果您是一个软件供应商,担心客户 DBA 会在您的代码周围乱搞,鉴于上述关于 SQL 监控的观点,并且假设 DBA 可以访问合适的破解程序,我认为您可以做很多事情来阻止他们他们。您可以通过限制对 DBA_SOURCE、V$SQL 和相关视图的访问来阻止非 DBA 用户这样做。
出于兴趣,我查看了 PLSQL 的本机编译,看看是否可以提供已编译的 M 代码而不是 PLSQL 源代码,但似乎您也必须提供 PLSQL 代码。
还有哪些其他选择? PLSQL 是否可以被分配到远程受保护的数据库并通过 REST API 调用使用?这在很大程度上取决于应用程序逻辑和数据访问,以及在受保护的远程服务器上提供此类服务是否可行。
如果绝对有必要隐藏逻辑,我会考虑的最后一件事是实现为 ProC/C/Java 模块来创建外部库。但也请注意,ProC/C/Java 中的 SQL 调用仍将在 V$SQL 中公开。另外,编写 Pro*C 的人已经不多了。
【讨论】:
使用包装功能只是混淆,而不是加密。它很容易通过各种可用的网站、python 脚本和其他 PL/SQL 程序撤消。你可以做一些额外的混淆来使你的代码的解释更加困难(Oracle 的 SQL Developer 有一些内置的函数),这样即使你的代码被解包,它仍然难以阅读。这也是另一个自定义混淆工具包的示例:https://pmdba.wordpress.com/2020/02/24/code-obfuscation-toolkit/。对于商业级工具包,请查看:http://www.petefinnigan.com/products/pfclobfuscate.htm
【讨论】: