| 參數 | 說明 | 範例值 |
TERMINAL | 客戶端機器名 | DB_SERVER_01 |
LANGUAGE | 語言/地區/字元集 | AMERICAN_AMERICA.AL32UTF8 |
SESSIONID | 會話 AUDSID | 123456 |
INSTANCE | 實例編號 | 1 |
ENTRYID | 審計條目 ID | 7890 |
ISDBA | 是否 DBA 角色 | TRUE |
NLS_TERRITORY | 地區設定 | AMERICA |
NLS_CURRENCY | 貨幣符號 | $ |
CURRENT_USER | 當前生效用戶 (Definer's Rights 為擁有者) | SCOTT |
CURRENT_USERID | 當前用戶 ID | 45 |
SESSION_USER | 登入用戶 (Invoker) | APP_USER |
PROXY_USER | 代理用戶 (若為 Proxy 連線) | APP_PROXY |
DB_NAME | 資料庫名稱 | ORCL |
HOST | 資料庫主機名 | db01 |
OS_USER | 作業系統用戶 | oracle |
IP_ADDRESS | 客戶端 IP | 192.168.1.100 |
AUTHENTICATION_TYPE | 認證方式 | PASSWORD / KERBEROS / SSL |
FG_JOB_ID | 前景作業 ID (DBMS_JOB) | 123 |
一鍵查詢所有常用參數
SELECT
SYS_CONTEXT('USERENV','TERMINAL') terminal,
SYS_CONTEXT('USERENV','LANGUAGE') language,
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','INSTANCE') instance,
SYS_CONTEXT('USERENV','ISDBA') isdba,
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','SESSION_USER') session_user,
SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,
SYS_CONTEXT('USERENV','DB_NAME') db_name,
SYS_CONTEXT('USERENV','HOST') host,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') auth_type
FROM DUAL;
三、進階應用:結合 V$SESSION 獲取完整會話畫像
SELECT s.sid, s.serial#, s.username, s.machine, s.program, s.module, s.action,
s.logon_time, s.status, s.sql_id, s.prev_sql_id,
ctx.ip_address, ctx.os_user, ctx.terminal, ctx.authentication_type
FROM v$session s
JOIN (
SELECT
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','TERMINAL') terminal,
SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type
FROM DUAL
) ctx ON s.audsid = ctx.sessionid
WHERE s.sid = SYS_CONTEXT('USERENV','SID'); -- 當前會話
四、最佳實踐建議
- 統一使用 SYS_CONTEXT:功能超集、支援自訂命名空間 (
CREATE CONTEXT)、效能優於 USERENV。
- 審計/安全觸發器:記錄
IP_ADDRESS, OS_USER, MODULE, ACTION (配合 DBMS_APPLICATION_INFO.SET_MODULE)。
- 應用上下文:建立自訂 Context 存放租戶 ID、權限標籤,實現 VPD (Virtual Private Database) 行級安全。
- 注意權限:
SYS_CONTEXT('USERENV', ...) 需 EXECUTE ON SYS.DBMS_SESSION (PUBLIC 默認擁有)。
- 上一篇文章: Oracle 分區表執行計劃深度解析:Partition Pruning 與 Pstart/Pstop 關鍵指標
- 下一篇文章: Oracle FOR UPDATE vs FOR UPDATE NOWAIT/WAIT n:鎖定行鎖行為差異與實戰選型
Copyright ©
程式碼之家 All Rights Reserved