OCP認證考試指南(11):保護Oracle數據庫的安全(1)

1、調整默認的安全設置

1.1、默認的用戶

查看數據庫的用戶和狀態,可以查詢DBA_USERS視圖。

SQL> select username,account_status from dba_users;

1.2、PUBLIC權限

Oracle中存在一個名爲PUBLIC的僞用戶。只要用PUBLIC授予某個權限,那麼所有用戶都會被授予這個權限。

SQL> select count(*) from dba_tab_privs where grantee = 'PUBLIC';
 
  COUNT(*)
----------
      1991
 
SQL> select table_name from dba_tab_privs where  grantee = 'PUBLIC'
  2  and privilege = 'EXECUTE' and table_name like 'UTL%';
 
TABLE_NAME
------------------------------
UTL_RAW
UTL_TCP
UTL_INADDR
UTL_SMTP
UTL_HTTP
UTL_URL
UTL_ENCODE
UTL_GDK
UTL_COMPRESS
UTL_I18N
UTL_LMS
 
TABLE_NAME
------------------------------
UTL_NLA_ARRAY_DBL
UTL_NLA_ARRAY_FLT
UTL_NLA_ARRAY_INT
UTL_NLA
UTL_REF
UTL_COLL
UTL_MATCH
UTL_FILE
 
19 rows selected.

針對上面列出的,我們來看下某些使用起來比較危險的程序包:

  • UTL_FILE:這個程序包允許用戶讀寫操作系統用戶可訪問的、運行Oracle進程的任務文件和目錄,這些文件與目錄包括所有的數據庫文件以及ORACLE_HOME目錄。
  • UTL_TCP:這個程序包允許用戶爲了連接網絡中所有可訪問的地址而打開服務機器上的TCP端口。
  • UTL_SMTP:使用UTL_TCP調用編寫的這個程序包允許用戶發送郵件消息。UTL_SMTP程序包受UTL_SMTP_SERVER實例參數限制,該參數給出了輸出郵件服務器的地址。
  • UTL_HTTP:這個程序包同樣使用UTL_TCP調用進行編寫,並且允許發送HTTP消息和接收響應,結果是將數據庫轉換爲Web瀏覽器。

記住:默認情況下,登入數據庫的任何用戶都能使用上述程序包。

雖然應用軟件可以爲PUBLIC用戶授予執行UTL程序包的權限,但我們應當取消PUBLIC用戶的這個權限。

SQL> revoke execute on utl_file from public;
 
Revoke succeeded.

2、對安全性至關重要的實例參數

提醒:這裏說的參數都是靜態的,被修改後必須重啓實例纔會有效。

2.1、UTL_FILE_DIR實例參數

UTL_FILE_DIR實例參數默認爲NULL,因此不是一個安全性問題。但在設置這個參數時,要特別小心。UTL_FILE_DIR參數允許PL/SQL通過UTL_FILE補充程序包來訪問服務器的系統。UTL_FILE程序包具有打開並讀寫文件的過程,唯一的限制是Oracle擁有者必須能夠訪問所列出的目錄。

使用這個實例參數的難點:因爲在實例層次上進行設置,所以無法允許某些用戶訪問一些目錄以及其他用戶訪問另外一些目錄。對UTL_FILE程序包具有執行權限的所有用戶有權訪問UTL_FILE_DIR參數中列出的所有目錄。

UTL_FILE_DIR參數接受一個用逗號分隔的目錄列表,並且是靜態的(參數可以包含通配符,不要將其設置爲“*”)。

SQL> alter system set utl_file_dir = '/ora01/tmp', '/dp_dir/dp' 
  2  scope = spfile;

2.2、REMOTE_OS_AUTHENT與OS_AUTHEN_PREFIX實例參數

REMOTE_OS_AUTHENT實例參數默認爲FALSE。這個參數控制某個用戶是否能夠在不需要給出口令的情況下從遠程計算機上連接數據庫。

通常用下面語法創建用戶:

SQL> create user jon identified externally;

這樣,身份驗證操作就委託給服務器的操作系統完成。

無論本地的還是遠程的外部身份驗證都涉及到OS_AUTHEN_PREFIX實例參數。該參數有個默認值OPS$。這裏我們要清空這個默認值。不然,Oracle的用戶名就是OPS$jon了。

SQL> create user jon identified externally;
 
User created.
 
SQL> grant create session to jon;
 
Grant succeeded.
 
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

在Oracle建了新的用戶後,我們就要在操作系統也建立用戶。

$ vi $ORACLE_HOME/dbs/initora.ora
####################################
# 最後一行加上
####################################
REMOTE_OS_AUTHENT=true
OS_AUTHENT_PREFIX=""
 
$ su - root
口令:
# /usr/sbin/useradd jon -m -g oinstall -G dba
# rm /home/jon/.bash_profile 
rm:是否刪除 一般文件 “/home/jon/.bash_profile”? y
# cp /home/oracle/.bash_profile /home/jon
# source /home/jon/.bash_profile
$ su - oracle
口令
$ sqlplus / as sysdba
 
SQL> create spfile from pfile;
 
File created.
 
SQL> startup
 
SQL> exit
 
SQL> exit
 
$ su - jon
口令:
$ sqlplus /
 
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 28 22:00:22 2008
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
 
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

啓用遠程操作系統身份驗證通常被認爲是一種不好的做法。

2.3、O7_DICTIONARY_ACCESSIBILITY實例參數

O7_DICTIONARY_ACCESSIBILITY實例參數控制使用ANY關鍵字授予對象權限的效果。默認FALSE。

SQL> grant select any talbe to jon;

授權查看數據庫中所有表。

O7_DICTIONARY_ACCESSIBILITY實例參數爲FALSE,ANY權限不被授予給SYS擁有的對象,從而保護數據字典,此時JON無法查看SYS擁有的對象。如果爲TRUE,則反之,可以查看。

提示:我們可以考慮爲有些用戶授予SELECT ANY DICTIONARY權限,這樣用戶可以查看數據字典以及動態性能視圖。

2.4、REMOTE_LOGIN_PASSWORDFILE實例參數

遠程的REMOTE_LOGIN_PASSWORDFILE實例參數控制具有SYSDBA權限的用戶是否能夠通過網絡連接實例。這個參數在默認值NONE的時候,得到SYSDBA連接的唯一方法是作爲擁有Oracle軟件的操作系統組的成員登入服務器的操作系統。

將REMOTE_LOGIN_PASSWORDFILE實例參數設置爲EXCLUSIVE或SHARED時,用戶可以通過下列的不同方法得到SYSDBA連接:即使沒有作爲Oracle軟件擁有組的成員登入服務器或者需要通過網絡進行連接,但是隻要知道相應的口令,一樣能作爲SYSDBA連接實例。這個口令以加密形式嵌入$ORACLE_HOME/dbs(Windows是%ORACLE_HOME%/database)系統文件。設置值爲SHARED意味着同一個Oracle主目錄內運行的所有實例共享一個公有的口令文件,對於所有實例公有的SYS用戶來說,這個主目錄內只有一個口令。設置值爲EXCLUSIVE意味着實例會尋找一個其名稱包含實例名的文件(Windows系統PWD.ora,Linux系統orapw)。

3、口令配置文件

3.1、口令配置文件的限制

每個用戶(甚至是SYS)都被指派一個配置文件,文件的名稱默認情況爲DEFALULT。

SQL> select profile, resource_name from dba_profiles
  2  where profile = 'DEFAULT';
 
PROFILE                        RESOURCE_NAME
------------------------------ --------------------------------
DEFAULT                        COMPOSITE_LIMIT
DEFAULT                        SESSIONS_PER_USER
DEFAULT                        CPU_PER_SESSION
DEFAULT                        CPU_PER_CALL
DEFAULT                        LOGICAL_READS_PER_SESSION
DEFAULT                        LOGICAL_READS_PER_CALL
DEFAULT                        IDLE_TIME
DEFAULT                        CONNECT_TIME
DEFAULT                        PRIVATE_SGA
DEFAULT                        FAILED_LOGIN_ATTEMPTS
DEFAULT                        PASSWORD_LIFE_TIME
 
PROFILE                        RESOURCE_NAME
------------------------------ --------------------------------
DEFAULT                        PASSWORD_REUSE_TIME
DEFAULT                        PASSWORD_REUSE_MAX
DEFAULT                        PASSWORD_VERIFY_FUNCTION
DEFAULT                        PASSWORD_LOCK_TIME
DEFAULT                        PASSWORD_GRACE_TIME
 
16 rows selected.

安全性相關的口令限制:

  • FAILED_LOGIN_ATTEMPTS:連續使用不正確口令請求連接的次數達到這個限制所指定的次數之後,帳戶會被鎖定。
  • PASSWORD_LOCK_TIME:指定達到FAILED_LOGIN_ATTEMPTS限制後帳戶被鎖定的天數。例如:(30/1440)等價於30分鐘。
  • PASS_LIFE_TIME:指定提示用戶修改口令之前需要經過的天數。
  • PASSWORD_GRACE_TIME:指定達到PASS_LIFE_TIME限制值後可以維持成功登錄的天數。
  • PASSWORD_REUSE_TIME:指定可以重用某個口令之前所經過的天數。這個限制阻止用戶修改口令時,修改同樣口令來回避PASS_LIFE_TIME限制的設置。
  • PASSWORD_REUSE_MAX:某個口令可以被重用的次數。
  • PASSWORD_VERIFY_FUNCTION:這個限制是一個在修改口令時會執行復雜度檢查。

除了用配置文件可以自動終止口令和鎖定帳戶,還可以通過SQL命令來提示用戶。

在下次登錄時,修改口令:

SQL> alter user test password expire;
 
User altered.

鎖定帳戶:

SQL> alter user test account lock;
 
User altered.

3.2、口令驗證功能

口令配置文件包含對某個PL/SQL函數(口令驗證函數)的引用。使用配置文件修改用戶的口令或通過管理員修改用戶的口令,那麼就會執行該函數。這個函數必須駐留在SYS模式中,並接受下列3個實參:用戶名、新的口令以及舊的口令。該函數返回值爲TRUE或FALSE,如果是FALSE,則拒絕修改口令。

Oracle標準安裝過程提供了一個示例函數。爲了創建這個函數,必須以SYS進行連接運行一個腳本。

SQL> @?/rdbms/admin/utlpwdmg.sql
 
Function created.
 
Profile altered.

所創建的口令驗證對新的口令執行下列檢查,沒有通過任何檢查的情況下拒絕修改口令:

  • 新口令與用戶名不能相同。不區分大小寫,比較之前,用戶名與口令都會被轉換爲小寫字母。
  • 新口令至少必須具有4個字符。
  • 針對一個包含6個常用口令的硬編碼列表,檢查同樣會被轉換爲小寫字母的新口令。
  • 檢查新口令,從而確保其至少包含一個數字、一個大寫或小寫字母以及一個標點符號。
  • 新口令至少包含3個與舊口令不同的字母,或者至少比舊口令多3個字符。

3.3、創建、指派以及修改口令配置文件

因爲所有用戶都被自動指派給名爲DEFAULT的配置文件,所以實現安全策略的最快方法是更改DEFAULT配置文件。之後,所有用戶都可以在其進行下一次登錄時獲取所做的變化。前面的UTLPWDMG.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;

運行這條命令的結果是:在6天之後提示所有用戶修改口令,並且允許用戶在隨後的10天內完成修改,否則將鎖定帳戶;在1800天的時間內,口令無法重用;連續3次輸入錯誤的口令,賬戶會被鎖定一分鐘;任何被修改的口令都將通過一個名爲SYS.VERIFY_FUNCTION的函數進行檢查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章