Stored-Procedures

如何查看已被“DBMS_DDL.WRAP”包裹的函式的原文

  • October 3, 2020

由於我是 Oracle PL-SQL 的新手,我正在嘗試熟悉DBMS_DDL包並用它來隱藏我的原始碼,您可以在下面看到我正在處理的範例:

Declare
 v_string varchar2(32676);
begin
 
 v_string := 'create or replace function get_os_user 
                return varchar2 ' || ' is  ' || ' begin ' ||
             ' return (sys_context(''userenv'',''os_user''));' || ' end; ';
 
 execute immediate sys.dbms_ddl.wrap(v_string);
end;

該函式get_os_user是在函式部分創建的,在查看模式下,我看到了原始函式的不可讀的十六進制格式。現在我的問題是如何才能看到函式的原始格式?我讀到的關於包裹的書的方式是這樣說的:

The original text can be viewed in DBA/ALL/USER_SOURCE

DBA/ALL/USER_SOURCE 在哪裡?還有其他方法可以查看包裝函式和過程的原始格式嗎?

您無法取回原始來源。 DBA_SOURCEALL_SOURCEUSER_SOURCE是數據字典視圖。所以你可以做類似的事情

select line, text
 from user_source
where name = 'GET_OS_USER'
  and type = 'FUNCTION';

這將向您顯示該函式的包裝文本。但是包裝原始碼的目的是防止有權訪問數據庫的使用者恢復您的原始碼。如果您只能在數據字典中查看未包裝的源,它將無法達到目的。

如果要包裝過程的原始碼,則需要將未包裝的原始碼放在數據庫之外。大概在原始碼控制系統中。

一些筆記-

  • 包裝是一件非常罕見的事情。只有當您傳遞的應用程序客戶將自行安裝和管理但您不相信您的客戶不會竊取您的智慧財產權時,這才真正有意義。如今,大多數處於這種位置的公司只會提供軟體即服務產品,而不是讓客戶管理他們自己的安裝。
  • 您可以在 Internet 上找到展示文稿和一些程序,介紹如何解開原始碼。因此,您無法取回原始來源並非嚴格意義上的正確。較新版本的 Oracle 以比舊版本更安全的方式實現包裝,但沒有一個版本是牢不可破的。
  • 如果您確實包裝了您的程式碼,那麼它執行的實際 SQL 語句將在各種數據字典表(如v$sqlAWR 報告等)中清晰可見。如果您的客戶決定對您的應用程序正在執行的操作進行逆向工程,他們可能可以. 包裹只是增加了難度。

引用自:https://dba.stackexchange.com/questions/276471