一、資料字典保護
啟用資料字典保護,隻有SYSDBA使用者才能通路資料字典基礎表
使用show parameters指令來檢查參數O7_DICTIONARY_ACCESSIBILITY是否為FALSE。
二、賬号安全管理
1、根據使用者的業務需要,配置最小權限
使用以下SQL查詢具有DBA權限的使用者
select grantee as usern from dba_role_privswhere granted_role ='DBA' intersect select username from dba_users;
使用以下SQL查詢具有DBA權限的角色
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);
2、使用資料庫角色(ROLE)來管理對象的權限
使用select * from dba_role_privs或dba_tab_privs; select* from user_role_privs;檢視帳号角色;确定帳号權限劃分是否明确。
3、對使用者的屬性進行控制,包括密碼政策、資源限制等。
為不同的業務使用者建立不同的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 限制會話在SGA中Shared 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次被鎖
4、根據業務限制具備資料庫超級管理者(SYSDBA)權限的使用者遠端登入
使用show parameters指令來檢查參數REMOTE_LOGIN_PASSWORDFILE是否為NONE。(搭建DG,RMAN備份等都需要管理者權限,根據業務設定)
5、限制在DBA組中的作業系統使用者數量
限制除oracle,grid之外的其它作業系統使用者在dba組中,以防止其使用者串改或删除oracle軟體檔案内容。
三、可信IP位址通路控制
通過資料庫所在作業系統或防火牆限制,隻有信任的IP位址才能通過監聽器通路資料庫,可通過設定$ORACLE_HOME/network/admin/sqlnet.ora檔案中參數tcp.validnode_checking和tcp.invited_nodes實作限制,需重新開機監聽。
四、預設端口及執行個體名修改
對于預設的1521端口,應該修改掉預設的監聽端口;對于 Oracle TNS Listener SID 可以被猜測,不應該使用安裝Oracle時預設的SID(ORCL),應該設定複雜度較高的SID。
五、記錄操作事件
1、建立觸發器對使用者登入進行日志記錄
建表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;
/
還可以通過建立資料庫連接配接使用相關的觸發器,比如:限制隻能IP為xxx的用戶端使用PL/SQL連接配接資料庫
2、資料庫應配置日志功能,記錄使用者對資料庫的操作
通過記錄記錄檔,記錄需要包含使用者帳号,操作時間,操作内容以及操作結果等。比如開啟監聽器日志。
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
3、根據業務要求制定資料庫審計政策
使用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)
六、資料庫漏洞管理
使用主流漏洞掃描工具進行掃描,對于中高危漏洞,應及時修複,檢查系統的詳細版本号,及時更新ORACLE釋出的中高危更新檔;對于暫無修複手段的漏洞,應通過其他技術手段進行風險規避。具體請參考:國内外權威的CVE漏洞庫。
CVE中文漏洞資訊庫-SCAP中文社群:http://cve.scap.org.cn/
CVE - Common Vulnerabilities and Exposures(CVE) :http://cve.mitre.org/
轉載于:https://blog.51cto.com/wyzwl/1952017