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

Oracle ORA-00922 錯誤深度解析:語法無效選項與 10g 明文密碼漏洞關聯案例

     編輯:Oracle 資料庫基礎

錯誤定義

ORA-00922: missing or invalid option
缺失或無效的選項

Cause:列定義或儲存子句中指定了無效選項。列有效選項僅 NOT NULL;約束需跟在數據類型後。對 DATE/LONG 指定最大長度也會觸發。
Action:修正語法,移除錯誤選項或長度規範。

經典觸發場景

  • CREATE TABLE t (c DATE(10)); — DATE 不接受精度;
  • ALTER USER u IDENTIFIED BY "pass!!" ACCOUNT UNLOCK; — 密碼含特殊字符未加引號;
  • CREATE TABLE t (c NUMBER(10,2) PRIMARY KEY NOT NULL UNIQUE); — 重複約束語法錯誤。

安全漏洞關聯案例:Oracle 10g Application Server 明文密碼洩露

影響版本

  • Oracle 10g Application Server 9.0.4.0
  • Oracle 10g Application Server 10.1.0.2

漏洞詳情

  1. 全局可讀配置文件洩露 SYSMAN 密碼:$ORACLE_HOME/hostname_sid/sysman/config/emoms.properties 存儲明文密碼,文件權限過寬;
  2. 安裝腳本記錄明文密碼:若 SYS/SYSTEM/DBSNMP/SYSMAN 密碼相同且包含驚嘆號 (如 f00bar!!),安裝時執行:
    ALTER USER SYSMAN IDENTIFIED BY f00bar!! ACCOUNT UNLOCK;
    ERROR at line 1: ORA-00922: missing or invalid option
    ALTER USER DBSNMP IDENTIFIED BY f00bar!! ACCOUNT UNLOCK;
    ERROR at line 1: ORA-00922: missing or invalid option
    錯誤日誌 postDBCreation.log 直接記錄失敗 SQL,導致明文密碼落盤洩露。

根因

密碼含特殊字符 ! 在 SQL*Plus 中屬保留字,需用雙引號包裹:IDENTIFIED BY "f00bar!!"。安裝腳本未轉義導致語法錯誤 (ORA-00922),錯誤日誌記錄完整 SQL 暴露密碼。

修補建議

  • 應用 Oracle Patch #68 (Metalink);
  • 避免多核心賬戶共用密碼;
  • 密碼策略禁止使用 ! @ # 等 SQL*Plus 保留字,或強制雙引號包裹;
  • 限制 emoms.properties 文件權限 chmod 600;
  • 啟用密碼驗證函數 UTLPWDMG 強制複雜度與歷史記錄。

通用避坑清單

場景錯誤寫法正確寫法
DATE 列定義c DATE(10)c DATE
密碼含特殊字符IDENTIFIED BY pass!!IDENTIFIED BY "pass!!"
LONG 列指定長度c LONG(1000)c LONG
儲存子句 PCTINCREASE 0 配合 MINEXTENTSSTORAGE (MINEXTENTS 5 PCTINCREASE 0)STORAGE (MINEXTENTS 5) 或移除 PCTINCREASE

ORA-00922 看似單純語法錯誤,實則可能揭示安全配置缺陷。建立「語法規範 → 安全合規 → 自動化掃描」三層防線,從源頭消除此類風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved