保護資料庫的安全(一)
1、調整預設的安全設定
1.1、預設的使用者
檢視資料庫的使用者和狀態,可以查詢DBA_USERS檢視。
SQL> select username,account_status from dba_users; |
1.2、PUBLIC許可權
Oracle中存在一個名為PUBLIC的偽使用者。只要用PUBLIC授予某個許可權,那麼所有使用者都會被授予這個許可權。
SQL> select count(*) from dba_tab_privs where grantee = 'PUBLIC'; COUNT(*) ---------- 1991 SQL> select table_name from dba_tab_privs where grantee = 'PUBLIC' 2 and privilege = 'EXECUTE' and table_name like 'UTL%'; TABLE_NAME ------------------------------ UTL_RAW UTL_TCP UTL_INADDR UTL_SMTP UTL_HTTP UTL_URL UTL_ENCODE UTL_GDK UTL_COMPRESS UTL_I18N UTL_LMS TABLE_NAME ------------------------------ UTL_NLA_ARRAY_DBL UTL_NLA_ARRAY_FLT UTL_NLA_ARRAY_INT UTL_NLA UTL_REF UTL_COLL UTL_MATCH UTL_FILE 19 rows selected. |
針對上面列出的,我們來看下某些使用起來比較危險的程式包:
- UTL_FILE:這個程式包允許使用者讀寫作業系統使用者可訪問的、執行Oracle程式的任務檔案和目錄,這些檔案與目錄包括所有的資料庫檔案以及ORACLE_HOME目錄。
- UTL_TCP:這個程式包允許使用者為了連線網路中所有可訪問的地址而開啟服務機器上的TCP埠。
- UTL_SMTP:使用UTL_TCP呼叫編寫的這個程式包允許使用者傳送郵件訊息。UTL_SMTP程式包受UTL_SMTP_SERVER例項引數限制,該引數給出了輸出郵件伺服器的地址。
- UTL_HTTP:這個程式包同樣使用UTL_TCP呼叫進行編寫,並且允許傳送HTTP訊息和接收響應,結果是將資料庫轉換為Web瀏覽器。
記住:預設情況下,登入資料庫的任何使用者都能使用上述程式包。
雖然應用軟體可以為PUBLIC使用者授予執行UTL程式包的許可權,但我們應當取消PUBLIC使用者的這個許可權。
SQL> revoke execute on utl_file from public; Revoke succeeded. |
2、對安全性至關重要的例項引數
提醒:這裡說的引數都是靜態的,被修改後必須重啟例項才會有效。
2.1、UTL_FILE_DIR例項引數
UTL_FILE_DIR例項引數預設為NULL,因此不是一個安全性問題。但在設定這個引數時,要特別小心。UTL_FILE_DIR引數允許PL/SQL通過UTL_FILE補充程式包來訪問伺服器的系統。UTL_FILE程式包具有開啟並讀寫檔案的過程,唯一的限制是Oracle擁有者必須能夠訪問所列出的目錄。
使用這個例項引數的難點:因為在例項層次上進行設定,所以無法允許某些使用者訪問一些目錄以及其他使用者訪問另外一些目錄。對UTL_FILE程式包具有執行許可權的所有使用者有權訪問UTL_FILE_DIR引數中列出的所有目錄。
UTL_FILE_DIR引數接受一個用逗號分隔的目錄列表,並且是靜態的(引數可以包含萬用字元,不要將其設定為“*”)。
SQL> alter system set utl_file_dir = '/ora01/tmp', '/dp_dir/dp' 2 scope = spfile; |
2.2、REMOTE_OS_AUTHENT與OS_AUTHEN_PREFIX例項引數
REMOTE_OS_AUTHENT例項引數預設為FALSE。這個引數控制某個使用者是否能夠在不需要給出口令的情況下從遠端計算機上連線資料庫。
通常用下面語法建立使用者:
SQL> create user jon identified externally; |
這樣,身份驗證操作就委託給伺服器的作業系統完成。
無論本地的還是遠端的外部身份驗證都涉及到OS_AUTHEN_PREFIX例項引數。該引數有個預設值OPS$。這裡我們要清空這個預設值。不然,Oracle的使用者名稱就是OPS$jon了。
SQL> create user jon identified externally; User created. SQL> grant create session to jon; Grant succeeded. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> exit |
在Oracle建了新的使用者後,我們就要在作業系統也建立使用者。
$ vi $ORACLE_HOME/dbs/initora.ora #################################### # 最後一行加上 #################################### REMOTE_OS_AUTHENT=true OS_AUTHENT_PREFIX="" $ su - root 口令: # /usr/sbin/useradd jon -m -g oinstall -G dba # rm /home/jon/.bash_profile rm:是否刪除 一般檔案 “/home/jon/.bash_profile”? y # cp /home/oracle/.bash_profile /home/jon # source /home/jon/.bash_profile $ su - oracle 口令 |
$ sqlplus / as sysdba SQL> create spfile from pfile; File created. SQL> startup SQL> exit SQL> exit $ su - jon 口令: $ sqlplus / SQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 28 22:00:22 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options |
啟用遠端作業系統身份驗證通常被認為是一種不好的做法。
2.3、O7_DICTIONARY_ACCESSIBILITY例項引數
O7_DICTIONARY_ACCESSIBILITY例項引數控制使用ANY關鍵字授予物件許可權的效果。預設FALSE。
SQL> grant select any talbe to jon; |
授權檢視資料庫中所有表。
O7_DICTIONARY_ACCESSIBILITY例項引數為FALSE,ANY許可權不被授予給SYS擁有的物件,從而保護資料字典,此時JON無法檢視SYS擁有的物件。如果為TRUE,則反之,可以檢視。
提示:我們可以考慮為有些使用者授予SELECT ANY DICTIONARY許可權,這樣使用者可以檢視資料字典以及動態效能檢視。
2.4、REMOTE_LOGIN_PASSWORDFILE例項引數
遠端的REMOTE_LOGIN_PASSWORDFILE例項引數控制具有SYSDBA許可權的使用者是否能夠通過網路連線例項。這個引數在預設值NONE的時候,得到SYSDBA連線的唯一方法是作為擁有Oracle軟體的作業系統組的成員登入伺服器的作業系統。
將REMOTE_LOGIN_PASSWORDFILE例項引數設定為EXCLUSIVE或SHARED時,使用者可以通過下列的不同方法得到SYSDBA連線:即使沒有作為Oracle軟體擁有組的成員登入伺服器或者需要通過網路進行連線,但是隻要知道相應的口令,一樣能作為SYSDBA連線例項。這個口令以加密形式嵌入$ORACLE_HOME/dbs(Windows是%ORACLE_HOME%/database)系統檔案。設定值為SHARED意味著同一個Oracle主目錄內執行的所有例項共享一個公有的口令檔案,對於所有例項公有的SYS使用者來說,這個主目錄內只有一個口令。設定值為EXCLUSIVE意味著例項會尋找一個其名稱包含例項名的檔案(Windows系統PWD.ora,Linux系統orapw)。
3、口令配置檔案
3.1、口令配置檔案的限制
每個使用者(甚至是SYS)都被指派一個配置檔案,檔案的名稱預設情況為DEFALULT。
SQL> select profile, resource_name from dba_profiles 2 where profile = 'DEFAULT'; PROFILE RESOURCE_NAME ------------------------------ -------------------------------- DEFAULT COMPOSITE_LIMIT DEFAULT SESSIONS_PER_USER DEFAULT CPU_PER_SESSION DEFAULT CPU_PER_CALL DEFAULT LOGICAL_READS_PER_SESSION DEFAULT LOGICAL_READS_PER_CALL DEFAULT IDLE_TIME DEFAULT CONNECT_TIME DEFAULT PRIVATE_SGA DEFAULT FAILED_LOGIN_ATTEMPTS DEFAULT PASSWORD_LIFE_TIME PROFILE RESOURCE_NAME ------------------------------ -------------------------------- DEFAULT PASSWORD_REUSE_TIME DEFAULT PASSWORD_REUSE_MAX DEFAULT PASSWORD_VERIFY_FUNCTION DEFAULT PASSWORD_LOCK_TIME DEFAULT PASSWORD_GRACE_TIME 16 rows selected. |
安全性相關的口令限制:
- FAILED_LOGIN_ATTEMPTS:連續使用不正確口令請求連線的次數達到這個限制所指定的次數之後,帳戶會被鎖定。
- PASSWORD_LOCK_TIME:指定達到FAILED_LOGIN_ATTEMPTS限制後帳戶被鎖定的天數。例如:(30/1440)等價於30分鐘。
- PASS_LIFE_TIME:指定提示使用者修改口令之前需要經過的天數。
- PASSWORD_GRACE_TIME:指定達到PASS_LIFE_TIME限制值後可以維持成功登入的天數。
- PASSWORD_REUSE_TIME:指定可以重用某個口令之前所經過的天數。這個限制阻止使用者修改口令時,修改同樣口令來回避PASS_LIFE_TIME限制的設定。
- PASSWORD_REUSE_MAX:某個口令可以被重用的次數。
- PASSWORD_VERIFY_FUNCTION:這個限制是一個在修改口令時會執行復雜度檢查。
除了用配置檔案可以自動終止口令和鎖定帳戶,還可以通過SQL命令來提示使用者。
在下次登入時,修改口令:
SQL> alter user test password expire; User altered. |
鎖定帳戶:
SQL> alter user test account lock; User altered. |
3.2、口令驗證功能
口令配置檔案包含對某個PL/SQL函式(口令驗證函式)的引用。使用配置檔案修改使用者的口令或通過管理員修改使用者的口令,那麼就會執行該函式。這個函式必須駐留在SYS模式中,並接受下列3個實參:使用者名稱、新的口令以及舊的口令。該函式返回值為TRUE或FALSE,如果是FALSE,則拒絕修改口令。
Oracle標準安裝過程提供了一個示例函式。為了建立這個函式,必須以SYS進行連線執行一個指令碼。
SQL> @?/rdbms/admin/utlpwdmg.sql Function created. Profile altered. |
所建立的口令驗證對新的口令執行下列檢查,沒有通過任何檢查的情況下拒絕修改口令:
- 新口令與使用者名稱不能相同。不區分大小寫,比較之前,使用者名稱與口令都會被轉換為小寫字母。
- 新口令至少必須具有4個字元。
- 針對一個包含6個常用口令的硬編碼列表,檢查同樣會被轉換為小寫字母的新口令。
- 檢查新口令,從而確保其至少包含一個數字、一個大寫或小寫字母以及一個標點符號。
- 新口令至少包含3個與舊口令不同的字母,或者至少比舊口令多3個字元。
3.3、建立、指派以及修改口令配置檔案
因為所有使用者都被自動指派給名為DEFAULT的配置檔案,所以實現安全策略的最快方法是更改DEFAULT配置檔案。之後,所有使用者都可以在其進行下一次登入時獲取所做的變化。前面的UTLPWDMG.SQL指令碼完成了上述功能,這指令碼最後一條命令如下:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 60 PASSWORD_GRACE_TIME 10 PASSWORD_REUSE_TIME 1800 PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/1440 PASSWORD_VERIFY_FUNCTION verify_function; |
執行這條命令的結果是:在6天之後提示所有使用者修改口令,並且允許使用者在隨後的10天內完成修改,否則將鎖定帳戶;在1800天的時間內,口令無法重用;連續3次輸入錯誤的口令,賬戶會被鎖定一分鐘;任何被修改的口令都將通過一個名為SYS.VERIFY_FUNCTION的函式進行檢查。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9390331/viewspace-696716/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何保護PostgreSQL資料庫安全? | goteleportSQL資料庫Go
- 資料庫保護資料庫
- Flutter 保護你的APP資料安全FlutterAPP
- 資料安全與PostgreSQL:保護策略SQL
- CRM保護客戶資料安全的方法?
- 更安全的rm命令,保護重要資料
- 雲資料安全:SQL Azure資料保護RVSQL
- 只需5項,教你保護資料安全!
- 大資料安全與隱私保護大資料
- CRM如何保護客戶資料安全?
- CRM如何保護企業資料安全?
- 保護大資料安全的10個要點大資料
- Oracle的過載保護-資料庫資源限制Oracle資料庫
- 四個保護資料安全的技術實踐
- 如何全面保護AI資料隱私和資料安全?AI
- 解讀《資料安全法》,開啟資料安全保護“新思路”
- 使用Hashids來保護你的資料庫主鍵資料庫
- 26-大資料安全需求分析與安全保護工程大資料
- 寫在2024年國際資料保護日之際:如何保護資料安全和隱私?
- 代理伺服器可以保護資料安全嗎?伺服器
- 保護資料安全與隱私,讓企業資料跨境安全合規
- 通過SQL Server資料庫映象保護虛擬資料庫ICSQLServer資料庫
- 從“微盟刪庫“事件探討銀行資料安全保護技術事件
- SQL Server資料庫備份保護的關鍵UMSQLServer資料庫
- 吉林大學資料庫安全防護資料庫
- 資料夾加密小工具:保護你的隱私安全加密
- 技術淺析:前端沙箱資料安全保護的機制前端
- 保護Amazon EC2中的SQL Server資料安全HESQLServer
- 企業及個人如何有效保護資料安全?
- 大資料安全保護,需要考慮哪幾方面?大資料
- 網際網路公司資料安全保護新探索
- 為資料安全保駕護航,華為雲助力企業快速安全過“等保”
- 保證資料庫質量安全:從0開始的資料庫測試資料庫
- 國務院:全面加強網路安全和資料安全保護
- Smartbi解讀最嚴《資料安全法》,開啟資料安全保護“新思路”!
- 怎樣保護資料
- 梭子魚資料保護和安全解決方案提供全面的勒索軟體攻擊保護
- 面對勒索軟體 如何保護資料備份安全?
- 構建全方位資料安全保護體系,中安威士讓資料更安全