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

Oracle用戶認證機制全景解析:從SYS到普通用戶

     編輯:Oracle 資料庫基礎

認證架構雙軌制

Oracle採用分層認證:數據庫未啟動時依賴外部機制驗證SYS;數據庫開啟後走內部數據字典驗證普通用戶。

SYS用戶:兩種認證路徑

1. 操作系統認證(本地優先,最高優先級)

# $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (NTS)  -- Windows
# Unix/Linux通常無需此行,靠OS群組dba直接授權
  • 原理:OS登錄用戶屬於dba(Unix)或ORA_DBA(Windows)群組即擁有SYSDBA權限。
  • 優先級最高:啟用時完全忽略密碼文件認證。

2. 密碼文件認證(遠程/集中管理必備)

# 1. 禁用OS認證
sqlnet.ora: SQLNET.AUTHENTICATION_SERVICES = (NONE)

# 2. 設置密碼文件模式
ALTER SYSTEM SET remote_login_passwordfile = EXCLUSIVE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE; STARTUP MOUNT;  -- 需重啟生效

# 3. 生成密碼文件
orapwd file=$ORACLE_HOME/database/pwd<SID>.ora password=oracle

# 4. 驗證差異
sqlplus / as sysdba           -- 權限不足(OS認證已禁用)
sqlplus sys/oracle as sysdba  -- 成功(密碼文件認證)
remote_login_passwordfile值含義
NONE不使用密碼文件
EXCLUSIVE單實例獨享,允許GRANT SYSDBA新用戶
SHARED多實例共享,僅SYS/INTERNAL持有SYSDBA

普通用戶:數據字典驗證

  • 前提:數據庫已OPEN,系統表空間可訪問。
  • 機制:對比DBA_USERS視圖中存儲的加密密碼雜湊值。
  • 查詢所有用戶雜湊(需DBA權限):
SELECT username, password FROM dba_users;
-- 10g+密碼列為加密雜湊,不可逆;11g+引入鹽值更安全

認證流程總結圖

客戶端連接請求
       │
       ▼
┌──────────────────┐
│ 數據庫實例狀態?  │
└────────┬─────────┘
         │
    ┌────┴────┐
    ▼         ▼
 NOMOUNT/MOUNT   OPEN
    │            │
    ▼            ▼
OS認證或       數據字典驗證
密碼文件認證    (DBA_USERS)
    │            │
    ▼            ▼
  SYSDBA/      普通用戶會話
  SYSOPER
最佳實踐:
• 生產庫強制禁用OS認證,統一使用密碼文件(EXCLUSIVE)實現審計追蹤。
• 定期輪換SYS密碼並同步更新orapwd文件。
• 普通用戶強制啟用PROFILE密碼複雜度、過期、鎖定策略。
• 審計關鍵動作:AUDIT CREATE SESSION BY ACCESS記錄所有登錄嘗試。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved