Oracle數據加密方法分析

來源:本網整理

由于Oracle數據庫被廣泛應用,其口令加密算法也是備受關注。最早在1993年comp.databases.oracle.server新聞組中有人披露了加密算法的大部分細節。十年后,一本名為《Special Ops Host and Network Security for Microsoft,Unix and Oracle》的書中補全了算法最重要的一個環節—DES算法的KEY。至此,口令加密算法已無秘密可言。接踵而來的是互聯網上出現多個了Oracle口令破解工具。Oracle在2007年推出的最新版本11g中,使用了新的更安全的加密算法,但是新算法的細節很快又在互聯網上被公開。為提供兼容,11g版本保留了11g以前版本使用的加密口令,利用這一漏洞仍然可以對11g版本的加密口令進行破解。到底怎樣才能保證數據庫口令的安全呢?本文首先介紹Oracle數據庫各版本口令加密算法的內容,然后針對算法重點介紹加強數據庫安全性的應對措施?诹罴用芩惴◤腛racle7到Oracle 10gR2,使用DES算法對口令進行加密。對算法進行分析,可以得出如下結論:口令不區分大小寫,任意大小寫組合均可登錄;由于只使用固定KEY,只要用戶名和口令相同,在任一DB中存放的加密口令都相同;由于采用了用戶名和口令串接的方式,所以用戶aaa、口令bbbccc的加密值與用戶aaabbb、口令ccc完全相同。Oracle 11g版本的加密口令存放在SYS.USER$表中的SPARE4列中,而PASSWORD列中仍保留以前版本加密口令。由于客戶端計算加密口令需要用到SALT,在建立連接時,服務器端將SALT明文傳送給客戶端程序。Oracle 11g中新的口令加密算法中區分大小寫;由于加入了隨機數SALT,兩個不同用戶的口令即便完全相同,計算得到的SHA1的散列值也不同;不同DB中相同用戶相同口令,SHA1散列值也可能不同。目前,大多數破解工具的工作方式是得到加密口令后,對每一個可能的口令進行加密計算,比較計算結果而確定是否正確。由此,抵御口令破解可以從三個方面著手:防止加密口令外泄;在加密口令落入黑客手中后,口令也是不可破解的,或盡量增加破解的時間;即便是口令被破解,也是無用的,不能存取數據庫。防止加密口令泄露1.應用“最少權限”原則,盡量限制可存取加密口令用戶的人數在數據庫中檢查具有存取SYS.USER$或DBA_USERS權限的用戶,并從不需要的用戶中收回權限。但是操作并不簡單,這也是數據庫管理工作的特點。每一廠商的軟件中都實現了SQL標準之外的擴充,并且每一版本都有差異。限于篇幅,不可能對所有本文中建議的措施進行詳細的解釋說明,僅以此處檢查權限為例展示DBA工作的復雜性。本文中如未說明,則默認版本為11g。應用于11g以前版本時,請讀者確認是否需要修改。檢查權限主要的工具是數據字典視圖(也可以直接存取SYS用戶的基表,但基表的定義沒有公布,官方不提供技術支持)。視圖DBA_TAB_PRIVS存放了數據庫中數據對象上的授權信息。假定用戶A1和A2可以存取SYS.USER$表,檢查在SYS用戶USER$上有存取權限的用戶,可執行如下語句:SELECT GRANTEE FROM DBA_TAB_PRIVS WHERE TABLE_NAME=‘USER$’;我們已經知道用戶A1和A2,都可以存取SYS.USER$表,但為什么在上面查詢結果中沒有出現呢?這是因為在Oracle的權限管理中,對一個表的存取權限還可以通過系統權限或角色賦予,而DBA_TAB_PRIVS中僅列出了直接的對象權限的授予信息。對于SYS.USER$表而言,系統權限SELECT ANY DICTIONARY和角色DBA都包含了這一表的存取權限。所以完整列出所有可存取這一表的用戶應增加下面兩條查詢語句的結果:SELECT GRANTEE FROM DBA_SYS_PRIVS WHERE PRIVILEGE=‘SELECT ANY DICTIONARY’;SELECT GRANTEE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE=‘DBA’;通過上面的查詢語句,還是會遺漏某些用戶。如果把DBA角色授權給另一角色Admin,然后又將Admin角色授權給另一用戶NEWU,則此用戶可存取SYS.USER$表,但在上述三個查詢中并沒有直接列出NEWU的名字(角色Admin會出現在第三個查詢語句的結果中)。顯然,Oracle的授權構成了一棵樹,完整的信息需要一段PL/SQL程序來完成。(對于11g以前版本,還需要檢查對DBA_USERS視圖有存取權限的用戶和角色。SELECT_CATALOG_ROLE角色如被授權,則可以存取所有數據字典視圖,但不能存取SYS的基表。2.設定對加密口令存取的審計如果當前系統中只有SYSDBA可以存取USER$,則一個變通辦法是審計SYSDBA的所有操作,其中也包括對USER$的存取。設置初始化參數audit_sys_operations=TRUE,重新啟動數據庫后激活對SYSDBA操作的審計。審計文件的存放位置為:11g版本中為:$ORACLE_BASE/admin/SID/adump/*.aud11g以前版本為:$ORACLE_HOME/rdbms/audit/*.aud。嚴格限制和監視SYSDBA用戶活動的最好辦法是使用Oracle Database Vault組件。3.在操作系統級限制對數據庫數據文件的存取SYSDBA用戶的加密口令存放在$ORACLE_HOME/dbs下的口令文件orapw〈SID〉中。SYS.USER$表同樣需要在數據文件中存放,多數為SYSTEM表空間的第一個數據文件中。此外,EXPORT文件、REDOLOG文件以及TRACE文件中都可能出現加密口令。需要嚴格限制上述文件的存取權限。4.防止網絡竊聽在建立連接時,客戶端需要向服務器端傳送用戶名和口令,并且服務器端與客戶端需要相互發送這次會話使用的SESSION KEY。Oracle采用Diffie-Hellman KEY交換算法和自己開發的O3LOGON協議完成上述任務。算法的細節同樣已在互聯網上被公開。建立連接時上述信息如果被截獲,同樣可以被用來破解口令。更為嚴重的是,如果黑客事先已經獲得加密口令,結合SESSION KEY的信息,則不需要任何破解,執行簡單還原運算就可算出口令明文。另外,設計SID時不要使用如ORCL、TEST、PROD等常用名字,設定PORT號為遠遠大于1521的數,都可以增加黑客SID掃描的難度和時間。5.刪除舊版的加密口令存放在Oracle 11g數據庫中的以前版本的加密口令是口令破解工具的一個突破口。在沒有兼容性限制的系統中,可以考慮從系統中刪除舊版口令,從而增加破解難度。具體操作如下:在SQLNET.ORA中增加一行:SQLNET.ALLOWED_LOGON_VERSION=11(Oracle手冊中格式介紹有錯誤,不能加括號:…=(11)),指定最低版本。以SYSDBA登錄后,執行以下語句,刪除舊版口令。update sys.user$set password=NULL;delete from user_history$;commit;設置修改后,基于OCI的工具如SQLPLUS、10gR1和10gR2版本都可以正常登錄,而JDBC type-4 則只有11g版本才允許登錄。提高口令強度1.禁止使用缺省口令,禁止與用戶名同名的口令,禁止字典詞匯的口令Oracle 11g中提供一個視圖DBA_USERS_WITH_DEFPWD,可以方便地查出系統中使用缺省口令的所有用戶,不足的是還有不少遺漏。讀者可以在互聯網找到缺省口令的列表,雖然是非官方的,但是比DBA_USERS_WITH_DEFPWD使用的官方的列表更全。破解工具附帶的詞匯表有的包括了大型英文詞典中全部詞匯,并支持詞匯與“123”之類的常用后綴進行組合。需要注意的是,有的詞匯表中已經出現了“zhongguo”這樣的字符串,所以漢語拼音組成的口令也是不安全的。檢查系統中是否存在弱口令的最常用方法就是使用前述口令破解工具進行攻擊。2.規定口令最小字符集和口令最短長度口令字符集最小應包括字母、數字和特殊符號,口令長度最短應不少于8位,對于安全性要求高的系統,最短長度應為12位以上。同樣,問題的關鍵在于DBA指定初始口令以及用戶修改口令時保證不違反上述這些規定。每一用戶都對應一個Profile,如在Profile中指定口令驗證函數,則每當創建或修改口令時,會自動檢查是否滿足驗證程序中所設定的條件,如果不滿足,則口令修改失敗。對口令明文進行檢查,顯然要比對加密口令破解效率高。此外,口令創建之時進行檢查可以及時封殺弱口令,不給黑客留下破解的窗口。指定口令驗證函數的語句為:ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION 口令驗證函數名;上例中,為“DEFAULT”Profile指定了驗證函數。對用戶進行分類后,應當為每一類用戶分別創建自己的Profile,而不是全部使用DEFAULT。關閉口令驗證函數的語句為:ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;在$ORACLE_HOME/rdbms/admin/下,腳本文件UTLPWDMG.SQL提供了示例的口令驗證函數,執行這一腳本,將創建一名為VERIFY_FUNCTION的函數(Oracle 11g中,增加新函數verify_function_11G)。這一函數可以對口令長度是否同時出現了字母數字符號進行檢查,檢查是否與用戶名同名,也檢查口令是否是幾個最常用的詞匯,如welcome、database1、account1等。最后,口令修改時檢查新舊口令是否過于相似。讀者實際使用時應該根據系統需要對這一函數進行必要的修改和擴充。3.使用易記憶的隨機口令限定口令長度后,如果口令沒有規律很難記憶,則用戶會采用他們自己的方式記住口令,大大增加了遭受社會工程攻擊的可能性。DBA需要幫助用戶設計一個容易記憶而又不易破解的口令。一個簡單易行的方法是找用戶非常熟悉的一個句子,如One world One dream,然后將每一個空格替換為數字或符號:One3world2One1dream#。定期更換口令抵御口令破解要從多方面著手數據庫中存在多種權限用戶,各種授權用戶構成一棵樹應對口令泄露或被破解的措施是強制定期更換口令,設定口令重復使用限制,規定封鎖口令的錯誤次數上限及封鎖時間。即便是加密口令落入黑客手中,在被破解之前或入侵之前,修改了口令,則口令破解變得毫無意義。為了方便記憶,一般用戶有重新使用之前過期口令的傾向,如果對重用不加控制,則定期更換口令將失去意義。上述對口令的管理仍然是通過Profile完成:ALTER PROFILE DEFAULT LIMITPASSWORD_LIFE_TIME 30PASSWORD_GRACE_TIME 7PASSWORD_REUSE_TIME 365PASSWORD_REUSE_MAX 0FAILED_LOGIN_ATTEMPTS 10PASSWORD_LOCK_TIME UNLIMITEDPASSWORD_VERIFY_FUNCTION my_verify_function;上面語句制定的口令管理政策為:口令的有效期為30天,隨后有7天的寬限期,寬限期后口令“過期”,必須更改口令后才能登錄。只有經過365天后才能重新使用以前的口令。在連續10次輸入..www.anxorj.tw防采集請勿采集本網。

s">

Oracle數據加密方法分析

作者:hbiao68 字體:[增加 減小] 類型:轉載 時間:2016-09-13 我要評論 這篇文章主要介紹了Oracle數據加密方法,實例分析了Oracle基于md5算法的數據加密技巧,需要的朋友可以參考下 ">

本文實例講述了Oracle數據加密方法。分享給大家供大家參考,具體如下:

針對這些問題,一個最有效實用而又低成本的方法就是分析Oracle數據庫的日志文件。本文將就Oracle日志分析技術做深入探討。一、如何分析即LogMiner解釋 從目前來看,分析Oracle日志的唯一方法就是使用

使用MD5編碼實現數據庫用戶密碼字段的加密

每個 Oracle數據庫對應唯一的一個實例名SID,Oracle數據庫服務器啟動后,一般至少有以下幾個用戶:Internal,它不是一個真實的用戶名,而是具有SYSDBA優先級的Sys用戶的別名,它由DBA用戶使用來完成數據庫

一、前言

正在看的ORACLE教程是:Oracle數據庫安全策略分析(三)。數據的安全性策略:數據的生考慮應基于數據的重要性。如果數據不是很重要,那么數據的安全性策略可以稍稍放松一些。然而,如果數據很重要,那么應該

眾所周知,MD5是目前應用最多的密碼保護方法,該編碼傳說為不可逆加密編碼(也就是說,永運無法倒算原碼)。 使用MD5加密用戶的操作密碼,可以有效防止系統維護人員直接進入數據庫時出現系統安全漏洞(直接使用SELECT語句查詢,將用戶密碼字段只能看到亂碼,或者"****")

利用日志分析器。你必須設置數據庫的初始化參數utl_file_dir=目錄名稱。重啟數據庫后,順序執行4個存儲過程,用來分析日志 dbsm_logmnr_d.build-(創建字典文件dbms_logmnr.add_logfile('filename

這里針對密碼字段加密,作一實例,希望能給大家系統建設過程帶來幫助。

由于ORACLE數據庫產品是當前數據庫技術的典型代表,她的產品除了數據庫系統外,還有應用系統、開發工具等。剛接觸Oracle的人員都有這樣的感覺:Oracle的產品太多,每個產品內容精深,不知道從

二、技術點

1. DBMS_OBFUSCATION_TOOLKIT.MD5

DBMS_OBFUSCATION_TOOLKIT.MD5是MD5編碼的數據包函數,但偶在使用select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') a from Dual時,卻有錯誤提示,看來該函數只能直接在程序包中調用,不能直接應用于SELECT語句。

2. Utl_Raw.Cast_To_Raw

DBMS_OBFUSCATION_TOOLKIT.MD5返回的字串,是RAW類型,要正確顯示,需要經過Utl_Raw.Cast_To_Raw轉換

create or replace package test_md5 as function fn_getmd5(p_str in varchar2) return varchar2; function fn_checkuser(p_username in varchar2,p_password in varchar2) return number;end;create or replace package body test_md5 as function fn_getmd5(p_str in varchar2) return varchar2 as begin return DBMS_OBFUSCATION_TOOLKIT.MD5( input_string => Upper(p_str) ); end; function fn_checkuser(p_username in varchar2,p_password in varchar2) return number is l_password varchar(1000); begin select password into l_password from test_user where upper(username)=upper(p_username) and password=Test_MD5.FN_GetMD5(p_password); if l_password is null Then return 0; else return 1; end if; exception when NO_DATA_FOUND then return 3; end;end;

測試:

Delete Test_User;Insert Into Test_User Values('A',Test_MD5.FN_GetMD5('aa'));Insert Into Test_User Values('B',Test_MD5.FN_GetMD5('bb'));select * from test_user;Select Test_MD5.FN_CheckUser('a','aa') From Dual;Select Test_MD5.FN_CheckUser('a','bb') From Dual;select * from Test_User t where t.password=test_md5.fn_getmd5('aa')

更多關于Oracle相關內容感興趣的讀者可查看本站專題:《Oracle常用函數匯總》、《Oracle日期與時間操作技巧總結》及《php+Oracle數據庫程序設計技巧總結》

希望本文所述對大家Oracle數據庫程序設計有所幫助。

設置加密密鑰:Oracle 透明數據加密提供了實施加密所必需的關鍵管理基礎架構。加密的工作原理是將明文數據以及秘密(稱作密鑰)傳遞到加密程序中。加密程序使用提供的密鑰對明文數據進行加密,然后返回加密數據。以往,創建和維護密鑰的任務由應用程序完成。Oracle 透明數據加密通過為整個數據庫自動生成一個萬能密鑰解決了此問題。在啟動 Oracle 數據庫時,管理員必須使用不同于系統口令或 DBA 口令的口令打開一個 Oracle Wallet 對象。然后,管理員對數據庫萬能密鑰進行初始化。萬能密鑰是自動生成的。性能:由于索引數據未被加密,因此加密通常會影響現有的應用程序索引。Oracle 透明數據加密對與給定應用程序表關聯的索引值進行加密。這意味著應用程序中的相等搜索對性能的影響很小,甚至沒有任何影響。例如,假設應用程序 card_id存在一個索引,并且此應用程序執行以下語句:SQL>Select cash from credit_card where card_id='1025023590';Oracle 數據庫將使用現有的應用程序索引,盡管 card_id信息已經在數據庫中加密。準備用于加密的數據庫:在本部分內容中,您將更新 sqlnet.ora、創建一個加密錢夾(ewallet.p12)、打開此錢夾并為 TDE創建萬能密鑰。執行以下操作:1.您需要更新 sqlnet.ora 文件以包含一個 ENCRYPTED_WALLET_LOCATION 條目。打開一個終端窗口,然后輸入以下命令:cd$ORACLE_HOME/network/admingedit sqlnet.ora將以下條目添加到文件末尾:ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=opt/oracle/admin/test97/wallet/)))如果不加這一項的話,則會提示下面錯誤:SQL>alter system set key identified by"hurray2;alter system set key identified by"hurrayERROR at line 1:ORA-28368:cannot auto-create walletopt/oracle/admin/test97/wallet/目錄是用來存放生成的錢夾的?梢詾榧用苠X夾選擇任何目錄,但路徑不應指向在數據庫安裝過程中創建的標準模糊錢夾(cwallet.sso)。2.接下來,您需要打開錢夾并創建萬能加密密鑰。從終端窗口中,輸入以下命令:connect/as sysdbaalter system set key identified by"welcome1;此命令的作用為:l 如果指定的目錄中不存在加密錢夾,則將創建加密錢夾(ewallet.p12)、打開此錢夾并創建/重新創建 TDE 的萬能密鑰。l 如果指定目錄中存在加密錢夾,則將打開此錢夾并創建/重新創建 TDE 的萬能密鑰。之后,就可以測試數據了。下面是實驗記錄:alter system set key identified by"welcome1;SQL>conn dodd/dodd123create table test(id number,credit_card_number varchar2(16)ENCRYPT NO SALT);SQL>insert into test values(1,'1231243242');1 row created.SQL>insert into test values(2,'33245235');SQL>commit;Commit complete.SQL>select*from test;ID CREDIT_CARD_NUMB1 12312432422 33245235可見,數據查看是明文,因為這個時候,加密錢夾已經打開,數據可以解密。這時,停止數據庫,再打開:SQL>shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL>SQL>startupORACLE instance started.Total System Global Area 524288000 bytesFixed Size 1979968 bytesVariable Size 138414528 bytesDatabase Buffers 377487360 bytesRedo Buffers 6406144 bytesDatabase mounted.Database opened.SQL>select*from dodd.test;select*from dodd.testERROR at line 1:ORA-28365:wallet is not openSQL>select id from dodd.test;ID12可以看到,因為數據庫重啟后,加密錢夾處于關閉狀態,這時只要查詢到加密的列,會提示加密錢夾沒有打開。如果用戶想打開錢夾,必須具有alter system權限。下面打開wallet:SQL>conn/as sysdbaConnected.SQL>alter system set wallet open identified by"welcome1;System altered.SQL>conn dodd/dodd123Connected.SQL>select*from test;ID CREDIT_CARD_NUMB1 12312432422 33245235可以看到,加密錢夾打開后,數據可以被解密。還有一條:sys用戶的表不能被加密?梢姡篛racle TDE是在數據層面上對表里的數據加密,而且不會影響數據庫現有的權限控制策略。salt實際上就是在加密過程中引入一個隨機性。簡單的說,就是一般來說,同樣的明文產生同樣的密文,這樣就導致容易被解密者通過分析詞頻之類的方式(加解密我不太懂)來通過密文破解明文,如果指定salt,那么即使同樣的明文加密后的密文也是不一樣的。no salt的話,自然就是相同的明文會產生相同的密文了。對于索引來說,要求no salt也就可以理解了丟失ewallet加密錢夾的話,是不能再解密數據的。Oracle 10gR2的 TDE 特性,對于防止機密信息的泄漏能起到事半功倍的作用!內容來自www.anxorj.tw請勿采集。

免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
Copyright © 2017 www.anxorj.tw All Rights Reserved
陕西快乐10分下载