如何才能保證數據庫密碼的安全性?本文首先介紹了Oracle數據庫版本密碼加密算法的內容,然後重點介紹了加強數據庫安全性的措施。
密碼加密算法
從Oracle7到Oracle 10gR2,密碼采用DES算法加密。通過分析算法,可以得出以下結論:密碼不區分大小寫,可以任意大小寫組合登錄;因為只使用固定密鑰,所以只要用戶名和密碼相同,任何DB中存儲的加密密碼都是相同的;因為用戶名和密碼是串聯的,所以用戶aaa和密碼bbbccc的加密值與用戶aaabbb和密碼ccc的加密值完全相同。
Oracle 11g版的加密口令存儲在sys文件的SPARE4列中。user $ table,而password列仍然保留以前版本的加密密碼。因為客戶端需要使用SALT計算加密密碼,所以在建立連接時,服務器會將SALT明文發送給客戶端程序。Oracle 11g中的新密碼加密算法區分大小寫;因為加入了隨機數鹽,所以即使兩個不同用戶的密碼完全相同,計算出來的SHA1的哈希值也是不同的。對於不同數據庫中的同壹用戶和同壹密碼,SHA1的哈希值可能不同。
目前大部分破解工具的工作模式都是在獲得加密密碼後,對每壹個可能的密碼進行加密,對比計算結果,判斷是否正確。因此,可以從三個方面抵禦密碼破解:防止加密密碼泄露;加密後的密碼落入黑客手中後,密碼也是無法破解的,或者想辦法增加破解時間;就算密碼被破解了也沒用,數據庫也無法訪問。
防止加密密碼泄露。
1.應用“最小權限”原則,盡量限制可以訪問加密密碼的用戶數量。
檢查數據庫中有權訪問SYS的用戶。USER$或DBA_USERS,並從不需要的用戶那裏收回權限。但是操作並不簡單,這也是數據庫管理的特點。每個廠商的軟件都實現了超越SQL標準的擴展,每個版本都有差異。限於篇幅,無法詳細解釋本文建議的所有措施,這裏僅以檢查權限為例來說明DBA工作的復雜性。除非本文另有說明,否則默認版本為11g。應用於11g之前的版本時,請確認是否需要修改。
檢查權限的主要工具是數據字典視圖(也可以直接訪問SYS用戶的基表,但是基表的定義還沒有發布,官方也不提供技術支持)。視圖DBA_TAB_PRIVS存儲數據庫中數據對象的授權信息。假設用戶A1和A2可以訪問SYS。USER$表中,檢查對sys用戶user $具有訪問權限的用戶,並執行以下語句:
從DBA_TAB_PRIVS中選擇GRANTEE,其中TABLE _ NAME = ' USER $
我們已經知道用戶A1和A2可以訪問SYS。USER$ table,但為什麽沒有出現在上面的查詢結果中?這是因為在Oracle的權限管理中,對表的訪問權限也可以通過系統權限或角色來授予,而DBA_TAB_PRIVS只列出了直接對象權限授予信息。為了系統。user $ table,系統權限SELECT ANY DICTIONARY和角色DBA都包含該表的訪問權限。因此,可以訪問該表的所有用戶都應該添加以下兩個查詢語句的結果:
SELECT GRANTEE FROM DBA _ SYS _ PRIVS WHERE PRIVILEGE = ' SELECT ANY DICTIONARY ';
從DBA_ROLE_PRIVS中選擇被授權者,其中GRANTED _ ROLE = ' DBA
通過上面的查詢語句,還是會漏掉壹些用戶。如果您將DBA角色授權給另壹個角色Admin,然後將Admin角色授權給另壹個用戶NEWU,則該用戶可以訪問SYS。USER$ table,但是NEWU的名字沒有直接列在上面的三個查詢中(角色Admin將出現在第三個查詢語句的結果中)。
很明顯,Oracle的授權構成了壹棵樹,完整的信息需要壹個PL/SQL程序來完成。(對於11g之前的版本,您還需要檢查對DBA_USERS視圖具有訪問權限的用戶和角色。如果SELECT_CATALOG_ROLE角色被授權,則它可以訪問所有數據字典視圖,但不能訪問SYS的基表。)
2.設置加密密碼訪問的審核。
如果在當前系統中只有SYSDBA有權訪問用戶$的話,另壹種方法是審計SYSDBA的所有操作,包括對用戶$的訪問。設置初始化參數audit _ sys _ operations = true,以便在重新啟動數據庫後激活SYSDBA操作的審計。
審計文件的存放位置是:
在11g版本中:$ Oracle _ base/admin/sid/adump/*。澳元。
11g之前的版本是$ Oracle _ home/RDBMS/audit/*。澳元。
嚴格限制和監控SYSDBA用戶活動的最佳方式是使用Oracle Database Vault組件。
3.在操作系統級別限制對數據庫數據文件的訪問。
SYSDBA用戶的加密口令存儲在$ORACLE _ HOME/DBS下的口令文件orapw〈SID〉中。系統。user $ table也需要存儲在數據文件中,大部分存儲在SYSTEM表空間的第壹個數據文件中。此外,加密的密碼可能出現在導出文件、重做日誌文件和跟蹤文件中。需要嚴格限制上述文檔的訪問權限。
4.防止網絡竊聽
建立連接時,客戶端需要向服務器發送用戶名和密碼,服務器和客戶端需要互相發送本次會話使用的會話密鑰。Oracle使用Diffie-Hellman密鑰交換算法和自己開發的O3LOGON協議來完成上述任務。算法的細節也已經在互聯網上公開。如果在建立連接時截獲了上述信息,也可以用來破解密碼。更嚴重的是,如果黑客已經提前獲取了加密密碼,結合會話密鑰的信息,不需要任何破解,只需要進行簡單的還原操作,就可以算作出口訂單明文。
另外,在設計SID時,不要使用ORCL、TEST、PROD等常用名稱。,並將端口號設置為遠大於1521的數字,可以增加黑客SID掃描的難度和時間。
5.刪除舊的加密密碼。
存儲在Oracle 11g數據庫中的上壹版本加密密碼是密碼破解工具的突破。在沒有兼容性限制的系統中,可以考慮從系統中刪除舊密碼,從而增加破解難度。
具體操作如下:
在SQLNET中添加壹行。ORA:sqlnet . allowed _ logon _ version = 11(Oracle手冊中格式介紹有誤,不能加括號:……=(11))指定最低版本。
以SYSDBA身份登錄後,執行以下語句刪除舊密碼。
update sys . user $ set password = NULL;
從user_history$中刪除;
提交;
修改設置後,SQLPLUS、10gR1、10gR2等OCI系工具可以正常登錄,而JDBC type-4只允許使用11g登錄。
提高密碼強度
1.禁止使用默認密碼、與用戶名同名的密碼和字典詞匯的密碼。
Oracle 11g提供了壹個視圖DBA_USERS_WITH_DEFPWD,可以很容易的找出系統中所有使用默認密碼的用戶,但是還是有很多疏漏。讀者可以在互聯網上找到默認密碼列表。雖然是非官方的,但是比DBA_USERS_WITH_DEFPWD使用的官方列表更完整。破解工具附帶的部分詞匯包括大型英文詞典中的所有單詞,支持“123”等常見後綴的單詞組合。需要註意的是,字符串“zhongguo”已經出現在部分詞匯中,所以由漢語拼音組成的密碼也是不安全的。檢查系統中是否存在弱密碼最常見的方法就是用上面提到的密碼破解工具進行攻擊。
2.指定最小密碼字符集和最小密碼長度。
最小密碼字符集應包括字母、數字和特殊符號,最小密碼長度應不少於8位。對於安全性要求高的系統,最小密碼長度應大於12位。同樣,問題的關鍵在於DBA指定初始密碼,用戶在修改密碼時確保不違反上述規定。每個用戶對應壹個配置文件。如果在配置文件中指定了密碼驗證功能,每當創建或修改密碼時,它將自動檢查是否滿足驗證程序中設置的條件。否則,密碼修改會失敗。檢查密碼明文顯然比破解加密密碼更高效。此外,在創建密碼時檢查密碼,可以及時屏蔽弱密碼,不給黑客留下破解的窗口。
指定密碼驗證功能的語句是:
Alter profile默認限制password _ verify _ function密碼驗證函數名稱;
在上面的例子中,為“默認”概要文件指定了壹個驗證函數。對用戶進行分類後,您應該為每種類型的用戶創建自己的配置文件,而不是壹直使用默認配置文件。關閉密碼驗證功能的語句是:
ALTER PROFILE默認限制PASSWORD_VERIFY_FUNCTION為NULL
在$ORACLE_HOME/rdbms/admin/下,腳本文件UTLPWDMG。SQL提供了壹個示例密碼驗證函數。當執行這個腳本時,將創建壹個名為VERIFY_FUNCTION的函數(在Oracle 11g中,添加了壹個新的函數VERIFY _ FUNCTION _ 11g)。該功能可以檢查密碼長度中是否同時出現字母數字符號,是否與用戶名同名,密碼是否是最常用的詞匯,如welcome、database1、account1等。最後,修改密碼時檢查新舊密碼是否過於相似。讀者在實際使用時應根據系統的需要對該功能進行修改和擴展。
3.在使用容易記憶的隨機密碼限制密碼長度後,如果密碼不規則且難以記憶,用戶會以自己的方式記憶密碼,這大大增加了被社會工程攻擊的可能性。DBA需要幫助用戶設計壹個容易記憶但不容易破解的密碼。壹個簡單的辦法就是找壹個用戶非常熟悉的句子,比如壹個世界壹個夢想,然後把每個空格換成數字或者符號:One3world2One1dream#。
定期更改密碼。
抵禦密碼破解的方法有很多。
數據庫中有很多種授權用戶,各種授權用戶形成壹棵樹。
應對密碼泄露或破解的措施是定期更換密碼,設置密碼重復使用的限制,規定錯誤次數的上限和被封鎖密碼的封鎖時間。即使加密後的密碼落入黑客手中,如果在被破解或入侵前修改了密碼,密碼破解也變得毫無意義。普通用戶為了方便記憶,傾向於重復使用之前已經過期的密碼。如果不控制重復使用,定期更換密碼將毫無意義。上述密碼管理仍通過配置文件完成:
更改配置文件默認限制
密碼壽命時間30
密碼_寬限_時間7
密碼重復使用時間365
密碼重用最大值0
失敗登錄嘗試次數10
密碼鎖定時間無限制
密碼_驗證_功能我的_驗證_功能;
上述聲明中制定的密碼管理策略是:密碼有效期為30天,之後是7天的寬限期。寬限期過後,密碼“過期”,您必須在登錄前更改密碼。只有在365天後,才能重復使用以前的密碼。連續10次密碼輸入錯誤後,賬號被封,且未設置為自動解鎖,必須由DBA手動解鎖。密碼驗證函數是my_verify_function。
在Oracle 11g之前,默認設置中沒有設置密碼的有效期,但在Oracle 11g中,默認設置為180天。在程序中直接寫密碼的應用升級到11g時,壹定要註意有效期,避免半年後應用突然無法自動運行。另外,密碼的有效性對SYS用戶沒有影響,所以DBA必須主動定期更改密碼。
另壹個措施是限制登錄數據庫服務器的主機,比如指定網段或IP地址。進壹步限制客戶端允許執行的程序,比如禁止使用SQLPLUS進行非本地登錄,只允許執行特定的應用程序。
仔細實施本文給出的措施後,可以有效防止密碼被破解。但是,我們的目的是提高數據庫系統的安全性,而不僅僅是保證密碼不被破解。數據庫系統安全的任何壹個環節出現問題,都會導致之前的所有努力付之東流。黑客的目的是入侵系統,竊取數據,不會按常理出牌。他們會嘗試各種手段,比如社會工程、安全漏洞、物理入侵等。,也不會固執地和我們在密碼破解上較勁。這就需要我們經常提醒自己,這樣才能保證數據庫系統的安全。
TechTarget中國原創內容