基礎知識6——安全和最小許可權原則
資料庫安全和最小許可權原則
使用者只擁有執行其任務所需的最小許可權,並禁止所有未被允許的許可權.
預設下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
使用者只擁有執行其任務所需的最小許可權,並禁止所有未被允許的許可權.
預設下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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基礎知識6——授予和撤銷許可權
- Linux使用者與“最小許可權”原則Linux
- 小知識:軟體開發的許可權控制和許可權驗證
- 許可權概念、許可權提升概念以及許可權提升的分類和目的 Windows 提權的基礎原理是瞭解作業系統的安全機制和許可權管理 Windows提權攻擊的進一步知識概念Windows作業系統
- 系統最小的服務最小的許可權最大的安全。
- linux基礎:檔案安全與許可權(轉)Linux
- WinXP中設定NTFS許可權基本策略和原則
- 基礎知識6——建立和管理角色
- MySQL基礎知識(6)MySql
- 學習Java知識應該注意哪些基礎原則Java
- Linux基礎之許可權管理Linux
- es6基礎知識
- 基礎知識6——建立和管理配置檔案
- 網路安全基礎知識
- 雲原生3R原則、現代最小許可權與DevSecOps平臺建設 - octodev
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- linux系統下的許可權知識梳理Linux
- corejava基礎知識(6)-檢視Java
- 基於案例分析 MySQL 許可權認證中的具體優先原則MySql
- (原)潤滑油基礎知識
- linux中安全和許可權那些事Linux
- 許可權系統:6個許可權概念模型設計模型
- Android系統許可權和root許可權Android
- django-rest-framework 基礎三 認證、許可權和頻率DjangoRESTFramework
- 柳大的Linux講義·基礎篇(3)許可權、連結與許可權管理Linux
- IPv6基礎知識詳解
- Android安全—許可權模型Android模型
- 基礎知識6——建立和管理使用者賬戶
- 選單許可權和按鈕許可權設定
- SSL和CA基礎知識
- GMAC和PHY基礎知識Mac
- 十、Abp vNext 基礎篇丨許可權
- Linux 基礎-檔案許可權與屬性Linux
- linux 基礎(2)檔案許可權及其修改Linux
- 基於 Laravel5.5 和 layui 包含基礎 RBAC 許可權的管理後臺LaravelUI
- 遊戲基礎知識——遊戲的“自我賦權”和“非自我賦權”傾向遊戲
- Java 訪問許可權控制(6)Java訪問許可權
- 服務計算基礎知識 UDDI SOAP WSDL特性 SOA 設計原則