ORACLE數據庫安全基礎知識

1、數據字典保護node

啓用數據字典保護,只有SYSDBA用戶才能訪問數據字典基礎表sql

使用show parameters命令來檢查參數O7_DICTIONARY_ACCESSIBILITY是否爲FALSE數據庫

 

2、帳號安全管理安全

一、根據用戶的業務須要,配置最小權限session

使用如下SQL查詢具備DBA權限的用戶oracle

select grantee as usern from dba_role_privswhere granted_role ='DBA' intersect select username from dba_users;

使用如下SQL查詢具備DBA權限的角色tcp

select grantee as usern from dba_role_privswhere granted_role ='DBA' minus (select grantee as usern from dba_role_privswhere granted_role ='DBA' intersect select username from dba_users);

二、使用數據庫角色(ROLE)來管理對象的權限ide

使用select * from dba_role_privsdba_tab_privs; select* from user_role_privs;查看賬號角色;肯定賬號權限劃分是否明確。工具

 

三、對用戶的屬性進行控制,包括密碼策略、資源限制等。spa

爲不一樣的業務用戶創建不一樣的profile,設置數據庫口令複雜度,有效期及鎖定配置等,Profile參數解釋以下:

A.對數據庫資源作限制

SESSIONS_PER_USER   每一個用戶名所容許的並行會話數

CPU_PER_SESSION     一個會話一共可使用的CPU時間,單位是百分之一秒

CPU_PER_CALL      一次SQL調用(解析、執行和獲取)容許使用的CPU時間

CONNECT_TIME      限制會話鏈接時間,單位是分鐘

IDLE_TIME         容許空閒會話的時間,單位是分鐘

LOGICAL_READS_PER_SESSION  限制會話對數據塊的讀取,單位是塊

LOGICAL_READS_PER_CALL    限制SQL調用對數據塊的讀取,單位是塊

COMPOSITE_LIMIT          指定一個會話的總的資源消耗,以serviceunits單位表示

PRIVATE_SGA    限制會話在SGAShared Pool中私有空間的分配

 

B.對密碼作限制

FAILED_LOGIN_ATTEMPTS 賬戶被鎖定以前能夠錯誤嘗試的次數

PASSWORD_LIFE_TIME    密碼能夠被使用的天數,單位是天,默認值180

PASSWORD_REUSE_TIME  密碼可重用的間隔時間(結合PASSWORD_REUSE_MAX)

PASSWORD_REUSE_MAX   密碼的最大改變次數(結合PASSWORD_REUSE_TIME)

PASSWORD_LOCK_TIME    超過錯誤嘗試次數後,用戶被鎖定的天數,默認1

PASSWORD_GRACE_TIME   當密碼過時以後還有多少天可使用原密碼

PASSWORD_VERIFY_FUNCTION  密碼複雜度設置,至少8個字符大寫字母+小寫字母+數字+特殊符號

 

具體用法舉例:

alter profile profile_name limitPASSWORD_VERIFY_FUNCTION verify_function_11g; --設置數據庫口令複雜度
alter profile profile_name limit FAILED_LOGIN_ATTEMPTS5 --設置數據庫口令輸錯5次被鎖


四、根據業務限制具有數據庫超級管理員(SYSDBA)權限的用戶遠程登陸

使用show parameters命令來檢查參數REMOTE_LOGIN_PASSWORDFILE是否爲NONE。(搭建DG,RMAN備份等都須要管理員權限,根據業務設置)

 

五、限制在DBA組中的操做系統用戶數量

限制除oracle,grid以外的其它操做系統用戶在dba組中,以防止其用戶串改或刪除oracle軟件文件內容。

 

3、可信IP地址訪問控制

經過數據庫所在操做系統或防火牆限制,只有信任的IP地址才能經過監聽器訪問數據庫,可經過設置$ORACLE_HOME/network/admin/sqlnet.ora文件中參數tcp.validnode_checkingtcp.invited_nodes實現限制,需重啓監聽。

 

4、默認端口及實例名修改
對於默認的1521端口,應該修改掉默認的監聽端口;對於 Oracle TNS Listener SID 能夠被猜想,不該該使用安裝Oracle時默認的SID(ORCL),應該設置複雜度較高的SID。


5、記錄操做事件

一、建立觸發器對用戶登陸進行日誌記錄

建表LOGIN_CHECK_LOG

create table login_check_log(session_idnumber(8,0) not null,login_on_time date,user_in_db varchar(50), ip_addressvarchar(20));

建觸發器LOGIN_CHECK

create trigger login_check
after logon on database
begin  
 insert into login_check_log(session_id,login_on_time,user_in_db,ip_address)select audsid,sysdate,sys.login_user,sys_context('userenv','ip_address') from v$session where audsid=userenv('sessionid'); 
 end;
/

還能夠經過建立數據庫鏈接使用相關的觸發器,好比:限制只能IPxxx的客戶端使用PL/SQL鏈接數據庫

 

二、數據庫應配置日誌功能,記錄用戶對數據庫的操做

經過記錄操做日誌,記錄須要包含用戶賬號,操做時間,操做內容以及操做結果等。好比開啓監聽器日誌。

LSNRCTL>set log_directory  $ORACLE_HOME/diag/tnslsnr/<hostname>/listener/alert/
LSNRCTL>set log_file log.xml
LSNRCTL>set log_status on
LSNRCTL>save_config


三、根據業務要求制定數據庫審計策略

使用show parameter命令來檢查參數audit_trail是否設置,具備參數以下:

none:是默認值,禁用數據庫審計。  

os:啓用審計,並將數據庫審計記錄定向到 OS審計記錄。  

db:啓用審計,並將數據庫審計記錄定向到數據庫的 SYS.AUD$ 11g此參數默認爲 db  

db_extended:啓用審計,並將數據庫全部審計記錄定向的到數據庫 SYS.AUD$表中,包含 SYS.AUD$表的 SQLBIND 列和 SQLTEXTCLOB 列。這樣審計的結果裏面除了鏈接信息還包含了當時執行的具體語句。  

xml:啓用數據庫審計,並將全部的記錄寫到XML 格式的 OS 系統文件中。

xml_extended:啓用數據庫審計,輸出審計記錄的全部列,包括 sqltext sqlbind

 

有興趣的童鞋還能夠了解一下ORACLE的安全審計產品:Oracle Audit Vault and Database Firewall AVDF

 

6、數據庫漏洞管理

使用主流漏洞掃描工具進行掃描,對於中高危漏洞,應及時修復,檢查系統的詳細版本號,及時更新ORACLE發佈的中高危補丁;對於暫無修復手段的漏洞,應經過其餘技術手段進行風險規避。具體請參考:國內外權威的CVE漏洞庫。

CVE中文漏洞信息庫-SCAP中文社區:http://cve.scap.org.cn/

CVE - Common Vulnerabilities and Exposures(CVE) http://cve.mitre.org/

相關文章
相關標籤/搜索