基礎知識6——安全和最小許可權原則

與刃爭鋒發表於2014-01-08
資料庫安全和最小許可權原則
使用者只擁有執行其任務所需的最小許可權,並禁止所有未被允許的許可權.
預設下SYS和SYSTEM擁有所有許可權.

除了使用口令配置檔案外,還需要遵循一些最佳實踐,特別熟授予public賬戶的許可權以及一些例項引數.

public角色隱式授予每個使用者,為public授予任何許可權,相應的許可權就授予連線到資料庫的每個人.
預設下public有很多許可權,尤其有能執行PL/SQL使用程式包的許可權

select count(*) from dba_tab_privs
where grantee='PUBLIC'
---------
21521

select table_name from dba_tab_privs
where grantee='PUBLIC' and privilege='EXECUTE' and table_name like 'UTL%';

TABLE_NAME
----------------
UTL_FILE
UTL_RAW
UTL_TCP
UTL_INADDR
UTL_SMTP
UTL_HTTP
UTL_URL
UTL_ENCODE
UTL_GDK
UTL_COMPRESS
UTL_I18N
UTL_LMS
UTL_NLA_ARRAY_DBL
UTL_NLA_ARRAY_FLT
UTL_NLA_ARRAY_INT
UTL_NLA
UTL_REF
UTL_COLL
UTL_MATCH
UTL_DBWS


雖然應用軟體可以為public使用者授予執行UTL包的許可權,但應取消public使用者的這個許可權:

revoke execute on utl_file from public;

public是授予所有人的角色——但在使用as sysoper語法連線到例項時,看似是連線到public賬戶.   --這句話我不太理解

某些例項引數非常重要,預設值通常是合理的,但某些情況下可能需要修改引數值.以下所列引數都是靜態的,需要重啟例項才會生效.

utl_file_dir --預設為null,此引數允許PL/SQL通過utl_file包來訪問伺服器計算機的檔案系統,utl_file包具有開啟並讀寫檔案的過程,唯一的限制是oracle擁有者必須能夠訪問所列出的目錄.
使用這個例項引數難點在於:因為在例項層次進行設定,所以不允許某些使用者訪問一些目錄而其他使用者訪問另外一些目錄,對utl_file包具有執行許可權的所有使用者有權訪問utl_file_dir引數中列出的所有目錄.utl_file_dir引數接受一個用逗號分隔的目錄列表,並且是靜態的,使用下列語法可設定這個引數(此示例允許對兩個目錄進行訪問,並重啟例項)

alter system set utl_file_dir='/oracle/tmp','/oracle/interface' scope=spfile;

可使用萬用字元,但不要將引數設定為*,這樣會允許所有使用者訪問資料庫的所有目錄和檔案

remote_os_authent   --預設false,此引數控制某個使用者是否能夠在不需要給出口令的情況下從遠端計算機連線資料庫.

o7_dictionary_accessibility --例項引數控制使用any關鍵字授予物件許可權的效果,預設為false,使用下列語法能為使用者harrogath授予檢視資料庫中所有表的許可權

grant select any table to harrogath;

harrogath目前看不到資料字典表與使用者表,o7_dictionary_accessibility預設為false,這說明any許可權不被授予SYS擁有的物件,從而保護資料字典,此時harrogath能看到所有使用者的資料,但無法看SYS擁有的物件,如果o7_dictionary_accessibility修改為true那麼所有物件被授予了any許可權,此時harrogath就能看資料字典和所有的使用者資料了.如果希望o7_dictionary_accessibility不改時讓使用者訪問資料字典,就給這些使用者授予select any dictionary的許可權,這樣使用者能看資料字典和動態效能檢視,但在沒有進行專門的指定時無法看到任何使用者資料.

remote_login_passwordfile   --此引數控制具有sysdba或sysoper許可權的使用者能否通過網路連線例項






練習,生成一個指令碼,以便從public刪除一些危險的許可權

system使用者連線,編輯SQL*Plus,從其輸出中刪除無關字元:

set headers off;
set pagesize 0;
set feedback off;

將輸出列印到適當目錄的檔案中

spool $HOME/oracle/scripts/clear_public_privs.sql   --unix平臺
spool d:\oracle\clear_public_privs.sql  --windows平臺

通過執行以下語句生成sql命令檔案:

select 'revoke execute on '||table_name||' from public;'
from dba_tab_privs where table_name like 'UTL_%';


停止輸出列印
spool off












來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25025926/viewspace-1068222/,如需轉載,請註明出處,否則將追究法律責任。

相關文章