有誰知道我怎麼可能讓一個觸發器或其他任何東西,以防止他人使用任何類型的礦山之外的應用程序在我的數據庫連接?防止應用程序登錄Oracle數據庫
請注意,用於阻止少數.exe如TOAD或watever的超舊和不安全觸發器實際上不起作用,因爲您可以將EXE重命名爲MyApplication.exe。
提示?
有誰知道我怎麼可能讓一個觸發器或其他任何東西,以防止他人使用任何類型的礦山之外的應用程序在我的數據庫連接?防止應用程序登錄Oracle數據庫
請注意,用於阻止少數.exe如TOAD或watever的超舊和不安全觸發器實際上不起作用,因爲您可以將EXE重命名爲MyApplication.exe。
提示?
如果你不信任的v $會話的程序名,然後浮現在腦海中的唯一選項是讓你的應用程序編碼的密碼,讓他們輸入的內容其實不是什麼用來連接到D B;或讓您的應用程序使用私人用戶名/密碼登錄,並根據您自己的用戶表對用戶進行身份驗證,而不是爲他們提供Oracle用戶帳戶。儘管這兩個選項都使賬戶管理更加複雜。
我不知道,Oracle有任何功能,以幫助這個(我可能是錯的),所以退而求其次可能是寫一個小服務器應用程序,讓你有在登錄過程中更好地控制和充當客戶端應用程序和數據庫服務器之間的中間人。這樣,數據庫的所有連接都通過您的服務器應用程序來實現,您可以控制服務器如何識別哪個客戶端應用程序是合法的。但這會給系統增加一點複雜性。
當您的應用程序日誌,您撥打的是,目前的Oracle會話爲「值得信賴的」會話相關聯的存儲過程。通過創建帶有sessionID和可信位字段的可信會話表(以及可選的隨機散列以防止用戶篡改)來實現此目的。
創建一個system wide trigger,是檢查你當前的會話ID(和隨機哈希值),如果它是可信的檢測。如果表中不存在會話,則不允許查詢並註銷用戶。
你也應該設置一個關機觸發在退出時清除受信任的會話表。
嗯......如果應用程序具有正確的連接字符串和用戶名/密碼,他如何防止不可信應用程序首先連接? – FrustratedWithFormsDesigner 2010-08-11 17:51:16
該應用程序可以在單獨的會話上做到這一點,以私人用戶身份登錄,並且只有該用戶已經執行了該程序?那麼你不能通過蟾蜍登錄並自己打電話。 – 2010-08-11 17:53:46
@FrustratedWithFormsDesigner我不認爲你可以阻止他們登錄,但如果他們嘗試執行任何操作,則可以將它們註銷並顯示錯誤消息。 @Alex好主意! – 2010-08-11 18:06:19
您可能希望考慮Oracle的安全應用程序角色 - 它不會阻止人們通過惡意應用程序登錄到數據庫,但是如果應用程序沒有設置角色,它可以阻止他們訪問表和程序包使用只有它知道的密碼。
你可以找到一個關於部署它的教程here,儘管爲了保護它,你必須使用密碼創建角色,並且在發出SET ROLE rolename IDENTIFIED BY rolepassword;
語句時,你的應用程序必須知道密碼。
更簡單的方法是將安全轉移到只能由您的應用程序啓用了作用 - 看到我的一個以前的答案here
這種方法的另一個應用程序可以創建一個會話,但沒有任何其他特權因爲該角色未啓用。
+1爲正確的方式。 – 2010-08-11 20:37:29
我猜這個問題是這樣的:某些應用程序已經有用戶名/密碼(並且你不能改變這些),所以你想阻止基於連接應用程序本身的連接... – FrustratedWithFormsDesigner 2010-08-11 17:21:42
Theres沒有通用登錄/應用程序的密碼。用戶獲得他們的登錄名/密碼並登錄。 – Alex 2010-08-11 17:33:40
什麼是架構?是什麼讓你的應用程序成爲你的應用程序(例如,如果它被部署在客戶端PC上,那麼停止它在那裏被編輯)。通常,n層體系結構可以更容易,因爲您可以確保數據庫只接受來自應用程序服務器的連接,並且最終用戶沒有物理/操作系統訪問應用程序服務器的權限以「欺騙」。 – 2010-08-11 23:16:54