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

Oracle 三大認證機制深度解析:資料庫認證、外部認證、全域認證

     編輯:Oracle 資料庫基礎

認證機制對照表

維度資料庫認證外部認證全域認證
密碼儲存位置資料庫內部 (加密)不儲存於資料庫不儲存於資料庫
驗證主體Oracle Server作業系統 / LDAP / KerberosOracle Enterprise Security (OES) / Oracle Internet Directory (OID)
建立語法IDENTIFIED BY passwordIDENTIFIED EXTERNALLYIDENTIFIED GLOBALLY AS 'DN'
適用場景一般應用、開發測試SSO 整合、Windows 域、Kerberos企業級統一身分管理、雲端部署
授權管理資料庫角色/權限OS 群組映射角色全域角色/企業角色
網路加密需額外設定 SSL/TLS依外部機制 (Kerberos 加密)內建 SSL/TLS

1. 資料庫認證 - 最常用、最簡單

建立使用者

CREATE USER app_user IDENTIFIED BY "Str0ngP@ssw0rd!"
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp
  QUOTA UNLIMITED ON users
  PROFILE secure_profile
  ACCOUNT UNLOCK;

驗證流程

  1. 用戶提供 username/password
  2. Oracle 計算密碼雜湊(SHA-1/SHA-2/SCRAM)
  3. 與 SYS.USER$ 儲存值比對
  4. 檢查帳號狀態、密碼過期、Profile 限制
  5. 建立 Session

優缺點

  • ✅ 簡單、無外部依賴、完整由 DBA 控管
  • ❌ 密碼管理分散、難以整合企業 SSO、輪換需應用配合

2. 外部認證 - OS/LDAP/Kerberos 整合

建立使用者

-- OS 認證 (Windows/Linux)
CREATE USER ops$oracle IDENTIFIED EXTERNALLY;

-- LDAP/Kerberos (需設定 sqlnet.ora)
CREATE USER "cn=john,ou=users,dc=corp,dc=com" IDENTIFIED EXTERNALLY;

關鍵設定:sqlnet.ora

# OS 認證
SQLNET.AUTHENTICATION_SERVICES = (NTS)  -- Windows
SQLNET.AUTHENTICATION_SERVICES = (NONE) -- Linux OS auth 需額外設定

# Kerberos
SQLNET.AUTHENTICATION_SERVICES = (KERBEROS5)
SQLNET.KERBEROS5_CONF = /etc/krb5.conf
SQLNET.KERBEROS5_KEYTAB = /etc/oracle.keytab

# LDAP (OID/OUD/AD)
SQLNET.AUTHENTICATION_SERVICES = (LDAP)
SQLNET.LDAP_AUTHENTICATION = SSL
NAMES.DIRECTORY_PATH = (TNSNAMES, LDAP)

OS 認證運作機制

  1. 用戶已登入 OS(Windows 域 / Linux SSH 金鑰)
  2. 啟動 sqlplus /(無帳號密碼)
  3. Oracle 取得 OS 使用者名稱(如 ORACLE)
  4. 前綴 OPS$ → OPS$ORACLE
  5. 比對資料庫是否存在 CREATE USER OPS$ORACLE IDENTIFIED EXTERNALLY
  6. 通過 → 建立 Session

角色映射:OS 群組 → 資料庫角色

-- 建立外部角色
CREATE ROLE dba_role IDENTIFIED EXTERNALLY;
GRANT CREATE SESSION, CREATE TABLE TO dba_role;

-- OS 群組映射 (Windows 登錄表 / Linux /etc/oracle/ora_grps)
-- Windows: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\OSAUTH_PREFIX_DOMAIN
-- 群組名: ORA_DBA, ORA_OPER, ORA_SID_DBA 等

3. 全域認證 - 企業級統一身分管理

架構元件

  • Oracle Enterprise Security (OES):核心服務
  • Oracle Internet Directory (OID) / Unified Directory (OUD):LDAP 目錄
  • Oracle Wallet:憑證/私鑰儲存
  • Enterprise Manager:管理介面

建立全域使用者

-- DN (Distinguished Name) 來自目錄伺服器
CREATE USER "cn=jane,ou=engineers,dc=corp,dc=com" IDENTIFIED GLOBALLY AS 'cn=jane,ou=engineers,dc=corp,dc=com';

-- 或使用 GUID (12c+)
CREATE USER global_user IDENTIFIED GLOBALLY GUID 'A1B2C3D4-E5F6-7890-ABCD-EF1234567890';

全域角色與企業角色

-- 全域角色 (僅限全域使用者授予)
CREATE ROLE global_read_only IDENTIFIED GLOBALLY;
GRANT SELECT ON critical_table TO global_read_only;

-- 企業角色 (可授予全域使用者、外部使用者、資料庫使用者)
-- 需透過 Enterprise Manager 或 OID 管理主控台建立

Wallet 設定 (用戶端/伺服器)

# sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /etc/oracle/wallet)))
SSL_CLIENT_AUTHENTICATION = TRUE
SSL_VERSION = 1.2
SSL_CIPHER_SUITES = (TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)

三種認證共存與遷移策略

共存模式

同一資料庫可同時存在三類使用者:

SELECT username, authentication_type FROM dba_users;
-- AUTHENTICATION_TYPE: DATABASE / EXTERNAL / GLOBAL

遷移路徑:資料庫認證 → 外部/全域認證

-- 1. 建立對應的外部/全域使用者
CREATE USER "ops$app_user" IDENTIFIED EXTERNALLY;

-- 2. 複製權限
-- 使用 DBMS_METADATA.GET_GRANTED_DDL 輸出原使用者權限
-- 套用至新使用者

-- 3. 修改應用連線方式
-- 移除密碼,使用 OS 認證 / Wallet / Kerberos Ticket

-- 4. 鎖定/移除舊資料庫認證使用者
ALTER USER app_user ACCOUNT LOCK;
-- 觀察一段時間後 DROP USER

選擇決策矩陣

需求推薦認證理由
快速開發、獨立應用、無 SSO 需求資料庫認證零設定、完全控管
Windows 域環境、DBA 免密維護外部認證 (NTS)整合 AD、單一登入
Linux/Unix Kerberos 基礎建設外部認證 (KERBEROS5)強加密、雙向認證
企業級統一身分、雲端混合部署全域認證 (OES/OID)集中管理、憑證基礎、支援 PDB
法規要求集中存取控制、審計全域認證企業角色、細粒度授權

常見誤區

  1. 誤區:外部認證不需要資料庫建立使用者。
    事實:資料庫必須建立 IDENTIFIED EXTERNALLY 使用者,才能映射外部身分。
  2. 誤區:全域認證需要 Oracle RAC。
    事實:單機也可使用全域認證,只需 OES/OID 基礎建設。
  3. 誤區:IDENTIFIED EXTERNALLY 密碼為空。
    事實:不儲存密碼,驗證委外給 OS/LDAP/Kerberos。
  4. 誤區:全域使用者無法擁有物件。
    事實:全域使用者可建立物件、授予權限,功能完整。

安全性比較

面向資料庫認證外部認證全域認證
密碼外洩風險中(資料庫內)無(不存密碼)無(憑證/Token)
中間人攻擊防禦需 SSLKerberos 內建SSL/TLS 內建
單一登入 (SSO)不支援支援 (OS/Kerberos)支援 (企業目錄)
集中帳號管理分散OS/LDAP 集中企業目錄集中
部署複雜度低中高
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved