首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料安全全景 (三):用戶管理規範、密碼文件維護與加密實戰

     編輯:Oracle 資料庫基礎

高風險預設用戶:DBSNMP

典型安裝自動建立 DBSNMP,密碼同名,擁有 UNLIMITED TABLESPACE、CREATE PUBLIC SYNONYM 等系統權限。攻擊者可利用此帳號寫入垃圾資料撐爆表空間,導致服務癱瘓。

對策:安裝後立即修改密碼、回收不必要系統權限、或鎖定帳號(ALTER USER dbsnmp ACCOUNT LOCK),啟用 Enterprise Manager 時再解鎖並設強密碼。

普遍用戶管理亂象

  • 權限過大:開發/查詢帳號直接授 DBA。
  • 存儲混雜:所有用戶預設表空間為 SYSTEM,資料互通、保密性差、易撐爆系統表空間。
  • 密碼弱化:用戶名=密碼、SYS/SYSTEM 密碼預設 manager、密碼未定期輪換。

用戶管理規範建議

1. DBA 帳號規範

  • OS 層 oracle 用戶密碼高強度、定期輪換、嚴格限知。
  • SYS/SYSTEM 密碼修改為高強度字串,禁用預設 manager。
  • OEM/Grid Control 管理端口帳號同等級防護。
  • 生產環境建議在 Server Console 本地以 SVRMGR/SQL*Plus 維護,減少遠端攻擊面。

2. 應用用戶存儲隔離

  • 每個應用系統獨立表空間、獨立物理檔案路徑、獨立臨時表空間。
  • 物理檔案命名規範:/data/oradata/<應用>/<表空間>_<序號>.dbf。
  • 根據資料量規劃初始大小與自動擴展步長,避免一次分配過大難回收。
  • 索引與資料分離不同表空間,降低爭用、提升 I/O 並行。
  • Web 建立的用戶預設表空間為 SYSTEM,DBA 必須事後修正為應用專用表空間。

3. 密碼策略

  • 用戶名 ≠ 密碼,長度 ≥ 8 位,含大小寫/數字/特殊字元。
  • 不同用戶密碼不重複,定期輪換(Profile 設定 PASSWORD_LIFE_TIME、PASSWORD_REUSE_TIME、PASSWORD_VERIFY_FUNCTION)。
  • 啟用 SEC_CASE_SENSITIVE_LOGON = TRUE(11g+ 預設開啟)。

4. 特殊需求用戶最小權限

-- 建立唯讀/增刪改用戶範例
CREATE USER app_user IDENTIFIED BY strong_pwd
  DEFAULT TABLESPACE app_data
  TEMPORARY TABLESPACE temp
  QUOTA 1G ON app_data;

GRANT CREATE SESSION TO app_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON schema_owner.emp TO app_user;
-- 嚴禁授 DBA/RESOURCE/UNLIMITED TABLESPACE

密碼文件完整生命週期管理

建立

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=sys_pwd entries=20 force=y
  • entries:最大 SYSDBA/SYSOPER 用戶數,預留充足。
  • force=y:覆蓋既有檔案。

參數控制 REMOTE_LOGIN_PASSWORDFILE

生產環境必須設為 EXCLUSIVE 並啟用遠端管理。

授予/回收 SYSDBA(自動同步密碼文件)

CONNECT / AS SYSDBA
GRANT SYSDBA TO ops_user;
REVOKE SYSDBA FROM ops_user;

查詢成員:SELECT * FROM v$pwfile_users;

擴充 entries 上限

  1. 查詢 v$pwfile_users 備份用戶清單。
  2. 關閉資料庫,刪除舊密碼文件。
  3. 重新 orapwd 建立更大 entries 文件。
  4. 依清單重新 GRANT SYSDBA。

狀態變更與遷移

  • 修改 REMOTE_LOGIN_PASSWORDFILE 參數後,啟動實例自動同步文件狀態。
  • 移動密碼文件需同步更新 Registry/環境變數 ORA_SID_PWFILE 或 ORA_PWFILE。
  • 刪除密碼文件前,確保所有實例參數設為 NONE,後續改用 OS 驗證。

應用層加密實戰:密碼自動輪換與登入攔截

場景

收費系統 Client 分散多網點,DBA 不想頻繁手動改密碼、下發配置。

方案架構

  1. 建立專用管理用戶 test,授 CREATE SESSION, RESOURCE。
  2. 在 test 下建立加密函數 mmtranslate(可替換為 DBMS_CRYPTO AES256)。
  3. 建表 mmtest(usname, mima) 存儲明文密碼(僅 DBA 可讀)。
  4. 主程式 ON-LOGON 觸發器:
    ① 以 test 登入 → 讀取目標用戶明文密碼 → 加密 → 登出。
    ② 以加密密碼登入目標用戶 → 進入業務表單。
    執行檔僅下發 Client,源碼掌握在 DBA 手中。
  5. 利用 PRODUCT_USER_PROFILE 限制非開發環境 SQL*Plus 連線、禁用 DDL/DML 高危指令。

觸發器加密寫入範例

CREATE OR REPLACE TRIGGER scjmmm
BEFORE INSERT OR UPDATE OF mm ON ghxxb
FOR EACH ROW
BEGIN
  :new.mm := encrypt(:new.mm, :new.gh, TO_CHAR(SYSDATE,'SS'));
END;
/

CREATE OR REPLACE FUNCTION encrypt(inpass VARCHAR2, in_gh VARCHAR2, in_ss VARCHAR2)
RETURN VARCHAR2 IS
  v_key NUMBER; v_out VARCHAR2(20);
BEGIN
  -- 簡易演示邏輯,生產請用 DBMS_CRYPTO.ENCRYPT_AES256
  v_key := TO_NUMBER(NVL(in_ss,'77'));
  v_out := in_ss || RAWTOHEX(DBMS_CRYPTO.HASH(UTL_RAW.CAST_TO_RAW(in_gh||inpass), DBMS_CRYPTO.HASH_SH256));
  RETURN SUBSTR(v_out,1,20);
END;
/

外部防護體系

  • OS 層:建立 DBA 群組(710 權限)、應用群組(711 權限),$ORACLE_HOME/bin 歸屬 oracle:dba,資料檔 0600。
  • 網路層:啟用 SQLNET.ENCRYPTION_SERVER=REQUIRED、SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED;禁用明文密碼傳輸(ORA_ENCRYPT_LOGIN=TRUE)。
  • 審計:啟用標準/精細審計,關鍵操作(DDL、權限變更、失敗登入)寫入 OS 審計檔/資料庫審計表,定期異地備份。
  • 漏洞管理:訂閱 Oracle Critical Patch Update (CPU),建立補丁測試→灰度→全量推送流程;關注 CVE(如 WebLogic、OJVM、Listener 歷史高危漏洞)。

資料安全是系統工程,無單一銀彈。從「內部最小權限、加密、審計」到「外部 OS/網路/補丁防護」,層層設防、持續演進,才能在攻防博弈中立於不敗之地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
值行為
NONE不使用密碼文件,採 OS 驗證
EXCLUSIVE單實例專用,可包含非 SYS 用戶,支援授予 SYSDBA/SYSOPER
SHARED多實例共享,僅識別 SYS/INTERNAL(預設)