程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle數據庫安全加固記錄

Oracle數據庫安全加固記錄

編輯:Oracle教程

Oracle數據庫安全加固記錄


一個應用系統做等保,需要對數據庫進行安全加固,根據流程需要先在測試環境進行測試通過後應用於生產環境,這裡簡單記錄測試過程,審計內容是評測的重要點,但是生產環境也不便於開啟,這裡先簡單記錄之,後面再進行相關內容補充。

1. 刪除無用多余的帳號

1)查看帳號及狀態

SQL> select username,account_status from dba_users;

USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
ABC OPEN
B OPEN
KOU OPEN
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
ORDSYS EXPIRED & LOCKED
SQL>

說明: 如果不使用EM,可以停用MGMT_VIEW,DBSNMP,SYSMAN帳號.

2)刪除多余帳號,對於一些測試帳號可以刪除掉。

SQL> drop user kou cascade;
User dropped.
SQL>

 

2. 鎖定多余用戶,對於不明用途的帳號可以采用先鎖定一段時間,再刪除。

(1) 鎖定多余用戶

SQL> alter user abc account lock;
User altered.

(2) 解鎖用戶

SQL> alter user abc account unlock;
User altered.

SQL> select username,account_status from dba_users;

USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
B OPEN
ABC LOCKED
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKED

其它狀態參數說明:
OPEN: 正常的帳戶
LOCKED: 表示這個帳戶被鎖定;
EXPIRED: 表示該帳戶口令到期,要求用戶在下次logon的時候修改口令(系統會在該account被設置為expire後的第一次登陸是提示你修改密碼)
EXPIRED(GRACE): 當設置了grace以後(第一次成功登錄後到口令到期後有多少天時間可改變口令,在這段時間內,帳戶被提醒修改口令並可以正常登陸,account_status顯示為EXPIRED(GRACE).
LOCKED(TIMED): 這種狀態表示失敗的login次數超過了FAILED_LOGIN_ATTEMPTS,被系統自動鎖定,需要注意的是,在Oracle 10g中,默認的DEFAULT值是10次.
EXPIRED & LOCKED:表示此賬戶被設置為口令到期且被鎖定。
EXPIRED(GRACE) & LOCKED(TIMED): 當account_stutus為EXPIRED(GRACE)的時候,用戶又嘗試失敗的login次數超過了FAILED_LOGIN_ATTEMPTS,被系統自動鎖定
EXPIRED & LOCKED(TIMED): 當設置了account expire後,用戶又失敗的login次數超過了FAILED_LOGIN_ATTEMPTS,被系統自動鎖定
EXPIRED(GRACE) & LOCKED: 用戶account_status為EXPIRED(GRACE)後,又被DBA 手工鎖定帳戶後的狀態

 

3. 限制超級管理員遠程登錄

1)默認狀態下系統管理員是可以遠程登錄的,采用如下方式驗證。

C:\>sqlplus sys/oracle@orcl181 as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 8 14:51:18 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved.

連接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

2)限制超級用戶遠程登錄

說明: 遠程登錄訪問不登錄密碼文件進行驗證。

SQL> alter system set remote_login_passwordfile=none scope=spfile;

SQL> shutdown immediate;
SQL> startup;

3)限制用戶使用本地操作系統認證登錄

有些安全配置要求,限制本地操作系統認證登錄,配置如下。

$ vi /u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=none

4)測試方式

sqlplus system/oracle@orcl as sysdba
sqlplus / as sysdba

說明: 以上兩條如果都啟的話,SYSDBA用戶將無法登錄,數據庫也無法啟動,如果要進行管理操作,需要變通操作。

 

4. 根據帳號分配最小權限

Oracle提供三種標准的角色: connect,resource和DBA,限制DBA權限的用戶使用.

1)帳號擁有的系統權限

SQL> select * from dba_sys_privs where grantee='ABC';

GRANTEE PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
ABC UNLIMITED TABLESPACE NO

2)帳號擁有的角色

SQL> select * from dba_role_privs where grantee='ABC';

GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
ABC CONNECT NO YES
ABC RESOURCE NO YES
SQL>

3)帳號擁有的對象權限

SQL> select * from dba_tab_privs where grantee='ABC';
no rows selected

4)參考配置操作, 對於DBA權限,需要判斷是否需要DBA權限,否則都應取消dba權限,降為普通權,需要應用方DBA進行調整。

 

5. 帳號密碼策略配置

1)Oracle 10g密碼策略配置初始配置

說明:通常對管理帳號與維護帳號時行密碼策略,業務帳號不做策略限制,例如應用帳號過期,會影響業務的正常使用等情況,默認使用DEFAULT策略。

SQL> SELECT profile FROM dba_users WHERE username='ABC';

PROFILE
------------------------------
DEFAULT

SQL>

SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';

PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ----------------------------------------
DEFAULT PASSWORD FAILED_LOGIN_ATTEMPTS 10
DEFAULT PASSWORD PASSWORD_LIFE_TIME UNLIMITED
DEFAULT PASSWORD PASSWORD_REUSE_TIME UNLIMITED
DEFAULT PASSWORD PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD PASSWORD_VERIFY_FUNCTION NULL
DEFAULT PASSWORD PASSWORD_LOCK_TIME UNLIMITED
DEFAULT PASSWORD PASSWORD_GRACE_TIME UNLIMITED

SQL>

2) 修改並啟動密碼復雜度

說明:utlpwdmg.sql腳本中包括密碼策略及帳號策略, 該腳本後面是帳號策略的配置,可以事先注釋掉,後面再一一啟用。

SQL> alter system set resource_limit = true;
SQL> @$ORACLE_HOME/rdbms/admin/utlpwdmg.sql

3) 修改賬號策略

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

相關參數說明:
FAILED_LOGIN_ATTEMPTS: 允許登錄失敗的次數
PASSWORD_LOCK_TIME: 達到登錄失敗次數後,帳戶鎖定的天數,過了這個天數之後帳戶會自動解鎖
PASSWORD_LIFE_TIME: 口令的生存期(天)
PASSWORD_GRACE_TIME: 口令失效後從第一次成功登錄算起的更改口令的寬限期(天)
PASSWORD_REUSE_TIME: 可以重新使用口令前的天數
PASSWORD_REUSE_MAX: 可以重新使用口令的最多次數
PASSWORD_VERIFY_FUNCTION: 檢驗口令設置的PL/SQL 函數

查看結果:

SQL> set linesize 200;
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';

PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ----------------------------------------
DEFAULT PASSWORD FAILED_LOGIN_ATTEMPTS 3
DEFAULT PASSWORD PASSWORD_LIFE_TIME 60
DEFAULT PASSWORD PASSWORD_REUSE_TIME 1800
DEFAULT PASSWORD PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION
DEFAULT PASSWORD PASSWORD_LOCK_TIME .0006
DEFAULT PASSWORD PASSWORD_GRACE_TIME 10

7 rows selected.

SQL>

# 取消Oracle密碼復雜度檢查:
SQL> alter profile default limit password_verify_function null;
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

4) 可以針對單個用戶進行策略限制。

SQL> CREATE PROFILE ABC_PROFILE LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/1440;

SQL> alter user abc profile ABC_PROFILE;
User altered.

SQL>
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='ABC_PROFILE';

PROFILE RESOURCE RESOURCE_NAME LIMIT
------------------------------ -------- -------------------------------- ----------------------------------------
ABC_PROFILE PASSWORD FAILED_LOGIN_ATTEMPTS 3
ABC_PROFILE PASSWORD PASSWORD_LIFE_TIME UNLIMITED
ABC_PROFILE PASSWORD PASSWORD_REUSE_TIME 1800
ABC_PROFILE PASSWORD PASSWORD_REUSE_MAX UNLIMITED
ABC_PROFILE PASSWORD PASSWORD_VERIFY_FUNCTION NULL
ABC_PROFILE PASSWORD PASSWORD_LOCK_TIME .0006
ABC_PROFILE PASSWORD PASSWORD_GRACE_TIME 10

 

6. 啟動數據字典保護

只有SYSDBA才能訪問數據字典基礎表,普通用戶不能查看X$開頭的表。

SQL> show parameter O7_DICTIONARY_ACCESSIBILITY

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
SQL>

SQL> alter system set O7_DICTIONARY_ACCESSIBILITY= TRUE scope = spfile;
SQL> shutdown immediate;
SQL> startup;

 

7. 數據庫訪問控制

只有信任的IP地址才能通過監聽器訪問數據庫,非信任的客戶端會被拒絕, 本機IP地址一定要在信任之列。
通常對應用服務與數據庫服務器加入信任列表。

$ vi $ORACLE_HOME/network/admin/sqlnet.ora
tcp.validnode_checking = yes
tcp.invited_nodes = (192.168.233.150,192.168.233.151)

#除以下IP地址之外都允許訪問。
tcp.excluded_nodes = (IP1,IP2,...)

重啟監聽即可。

 

8. 設置空閒連接時間

$ vi $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.EXPIRE_TIME = 60

說明:客戶端連接後在設置的時間內沒有任何操作,客戶端會自動斷開。

 

9. 操作系統層面限制DBA用戶組的用戶數量

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved