經過相當詳盡的搜索之後,似乎沒有真正可靠的方法來隱藏Oracle數據庫中的代碼(即保護例程,函數,包和觸發器的代碼)。Oracle - 保護源代碼
模糊處理(WRAP)儘管最初很有前途,但結果卻毫無用處,因爲UNDO很容易混淆並獲取原始(可讀)代碼。
那麼,在我放棄之前,有沒有Oracle支持真正隱藏代碼的方法? (我的意思是,除了阻止訪問使用憑據)。
經過相當詳盡的搜索之後,似乎沒有真正可靠的方法來隱藏Oracle數據庫中的代碼(即保護例程,函數,包和觸發器的代碼)。Oracle - 保護源代碼
模糊處理(WRAP)儘管最初很有前途,但結果卻毫無用處,因爲UNDO很容易混淆並獲取原始(可讀)代碼。
那麼,在我放棄之前,有沒有Oracle支持真正隱藏代碼的方法? (我的意思是,除了阻止訪問使用憑據)。
雖然我不喜歡包裝的想法。因爲這對雙方(客戶/供應商)都沒有好處。我不得不說,程序/函數的包裝工作與包裝不同。
雖然封裝包裝只是替換字節。對於程序員來說,Oracle存儲ADA虛擬機的p代碼。這是很難扭轉恩格爾。
但無論如何,沒有辦法隱藏會話跟蹤。因此,DBA將始終能夠查看由PL/SQL代碼執行的SQL語句。
感謝您的及時回覆。我只是用這裏提供的服務檢查了一個函數,一個例程和一個整個Package:http://www.codecrete.net/UnwrapIt/。所有這三個都完美地返回到原始源代碼。因此,混淆不是一種選擇(不是因爲你提到的缺點,而是因爲它是無用的)。 – FDavidov
令人驚訝。我認爲沒有人投入足夠的努力來反轉原始ADA字節碼(或者多年來涉及的任何東西)。無論如何,由於DBA可能需要重新編譯PL/SQL,有或沒有優化,所以必須有一些方法來獲取原始源代碼。也許你可以在Java存儲過程中隱藏一些非常重要的代碼部分。但即使是java字節碼也可以反編譯。這只是投入的努力。 PS:Java存儲過程比C更容易。 – ibre5041
這也許是Pro-C,Pro-COBOL等預編譯器語言的其中一個優點。誠然,查詢總是可以通過跟蹤/監控來顯示,但是由於您提供的是編譯對象,所以語言中的非SQL邏輯將被隱藏。您可以選擇從PLSQL調用C庫(請參閱CREATE LIBRARY)來執行您的計算,但要想深入瞭解SQL和邏輯流之間的分區,我認爲這會很麻煩。此方法傾向於習慣於利用外部實用程序(例如,銀行嚮導庫來驗證銀行帳戶,PAF驗證等)。
爲什麼你不考慮使用權限來阻止訪問?如果您擔心DBA可以訪問,甚至可以通過[Oracle Database Vault](http://www.oracle.com/us/products/database/options/database-vault/overview/index)來限制它們。 HTML)。但是,作爲DBA處理該產品,我可以告訴你,限制這樣的管理員真的很痛苦。 –
感謝您的意見喬恩。我意識到阻止DBA訪問代碼所帶來的影響,但是(正如您可以想象的),有環境/應用程序,這種情況幾乎是必須的。 – FDavidov