我是pl / slq的新手,我的问题是:是否有可能在sql plus或sql developer中“编译”脚本并将文件提供给其他人以便允许其他人执行代码但不允许他们读代码?
答案 0 :(得分:6)
听起来你在谈论Oracle wrap utility(一个单独的命令行应用程序是Oracle客户端安装的一部分,而不是SQL Developer的一部分)或dbms_ddl.wrap function你可以调用它来自SQL Developer。这些创建了模糊的语句,这些语句将创建行为正常的存储过程(或包或函数),但数据字典中的文本不是人类可读的。自适应实用程序并不能提供完美的安全性 - 互联网上有解包工具和演示文稿,可以让攻击者解开您提供的代码。您通常可以通过查看其他数据字典视图(v$sql
将显示已执行的已解包的SQL语句)或通过跟踪会话来确定未解包的代码实际执行的操作。
答案 1 :(得分:0)
它还取决于单词give的定义。您可以将PL / SQL代码存储在数据库中。授予用户执行权限,查看包头的源代码,但不能查看包体的来源。但是当然DBA可以读取它,它们也可以跟踪它(即使它被包装)。
另请注意,PL / SQL包的封装方式与PL / SQL过程不同。从11g开始,使用简单的一对一字节替换来包装。对于PL / SQL过程,存在DIANA虚拟机的混淆字节码。 AFAIK没有PL / SQL程序的可访问解包,反向工程更难。