高風險預設用戶: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
| 值 | 行為 |
| NONE | 不使用密碼文件,採 OS 驗證 |
| EXCLUSIVE | 單實例專用,可包含非 SYS 用戶,支援授予 SYSDBA/SYSOPER |
| SHARED | 多實例共享,僅識別 SYS/INTERNAL(預設) |
生產環境必須設為 EXCLUSIVE 並啟用遠端管理。
授予/回收 SYSDBA(自動同步密碼文件)
CONNECT / AS SYSDBA
GRANT SYSDBA TO ops_user;
REVOKE SYSDBA FROM ops_user;
查詢成員:SELECT * FROM v$pwfile_users;
擴充 entries 上限
- 查詢
v$pwfile_users 備份用戶清單。
- 關閉資料庫,刪除舊密碼文件。
- 重新
orapwd 建立更大 entries 文件。
- 依清單重新
GRANT SYSDBA。
狀態變更與遷移
- 修改
REMOTE_LOGIN_PASSWORDFILE 參數後,啟動實例自動同步文件狀態。
- 移動密碼文件需同步更新 Registry/環境變數
ORA_SID_PWFILE 或 ORA_PWFILE。
- 刪除密碼文件前,確保所有實例參數設為
NONE,後續改用 OS 驗證。
應用層加密實戰:密碼自動輪換與登入攔截
場景
收費系統 Client 分散多網點,DBA 不想頻繁手動改密碼、下發配置。
方案架構
- 建立專用管理用戶
test,授 CREATE SESSION, RESOURCE。
- 在
test 下建立加密函數 mmtranslate(可替換為 DBMS_CRYPTO AES256)。
- 建表
mmtest(usname, mima) 存儲明文密碼(僅 DBA 可讀)。
- 主程式
ON-LOGON 觸發器:
① 以 test 登入 → 讀取目標用戶明文密碼 → 加密 → 登出。
② 以加密密碼登入目標用戶 → 進入業務表單。
執行檔僅下發 Client,源碼掌握在 DBA 手中。
- 利用
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/網路/補丁防護」,層層設防、持續演進,才能在攻防博弈中立於不敗之地。
- 上一篇文章: Oracle 外部連接語法全解:舊式 (+) 與 ANSI JOIN 對照
- 下一篇文章: Oracle 資料安全全景 (二):備份恢復策略與三大備份模式實戰
Copyright ©
程式碼之家 All Rights Reserved