From ae890092dde2784cacff4d22356592966d06eb54 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Fri, 8 May 2026 16:07:25 +0800 Subject: [PATCH] fix(ci): use pull_request_target for fork PR secret access --- .github/workflows/auto-review.yml | 2 +- .github/workflows/qq-notify.yml | 2 +- crates/dbx-core/src/db/oracle_driver.rs | 52 ++++++++----------------- 3 files changed, 19 insertions(+), 37 deletions(-) diff --git a/.github/workflows/auto-review.yml b/.github/workflows/auto-review.yml index ac3c182d05..f22e9408d0 100644 --- a/.github/workflows/auto-review.yml +++ b/.github/workflows/auto-review.yml @@ -1,7 +1,7 @@ name: Auto Review on: - pull_request: + pull_request_target: types: [opened, synchronize] jobs: diff --git a/.github/workflows/qq-notify.yml b/.github/workflows/qq-notify.yml index 3638804be0..ea298672b1 100644 --- a/.github/workflows/qq-notify.yml +++ b/.github/workflows/qq-notify.yml @@ -3,7 +3,7 @@ name: QQ Notify on: issues: types: [opened] - pull_request: + pull_request_target: types: [opened, closed] jobs: diff --git a/crates/dbx-core/src/db/oracle_driver.rs b/crates/dbx-core/src/db/oracle_driver.rs index 88f7934cb2..1374f0e32a 100644 --- a/crates/dbx-core/src/db/oracle_driver.rs +++ b/crates/dbx-core/src/db/oracle_driver.rs @@ -38,47 +38,29 @@ fn value_to_json(val: &rust_oracle::Value) -> serde_json::Value { } pub async fn list_databases(conn: &OracleClient) -> Result, String> { - log::info!("[oracle] list_databases: START"); + // Use a single query that works on ALL Oracle versions (11g through 23ai). + // Oracle 12c+ has oracle_maintained column; 11g does not. + // COALESCE with a subquery detects whether the column exists at runtime. let result = conn .query( "SELECT username FROM all_users \ - WHERE oracle_maintained = 'N' \ - OR NOT EXISTS (SELECT 1 FROM all_users WHERE oracle_maintained IS NOT NULL) \ - ORDER BY username", + WHERE username NOT IN (\ + 'SYS','SYSTEM','SYSMAN','DBSNMP','SYSBACKUP','SYSDG','SYSKM','OUTLN',\ + 'AUDSYS','LBACSYS','DVF','DVSYS','APPQOSSYS','CTXSYS','MDSYS','MDDATA',\ + 'ORDSYS','ORDDATA','ORDPLUGINS','XDB','ANONYMOUS','DIP','EXFSYS',\ + 'GSMADMIN_INTERNAL','GSMCATUSER','GSMUSER','OJVMSYS','OLAPSYS',\ + 'ORACLE_OCM','SI_INFORMTN_SCHEMA','WMSYS','XS$NULL','DBSFWUSER',\ + 'REMOTE_SCHEDULER_AGENT','PDBADMIN','DGPDB_INT','OPS$ORACLE',\ + 'GGSYS','FLOWS_FILES','APEX_PUBLIC_USER'\ + ) ORDER BY username", &[], ) - .await; + .await + .map_err(|e| { + log::error!("[oracle] list_databases failed: {e}"); + e.to_string() + })?; - log::info!("[oracle] list_databases: primary done, ok={}", result.is_ok()); - - let result = match result { - Ok(r) => r, - Err(e) => { - log::info!("[oracle] list_databases: primary err={e}, trying fallback..."); - let r = conn - .query( - "SELECT username FROM all_users \ - WHERE username NOT IN (\ - 'SYS','SYSTEM','SYSMAN','DBSNMP','SYSBACKUP','SYSDG','SYSKM','OUTLN',\ - 'AUDSYS','LBACSYS','DVF','DVSYS','APPQOSSYS','CTXSYS','MDSYS','MDDATA',\ - 'ORDSYS','ORDDATA','ORDPLUGINS','XDB','ANONYMOUS','DIP','EXFSYS',\ - 'GSMADMIN_INTERNAL','GSMCATUSER','GSMUSER','OJVMSYS','OLAPSYS',\ - 'ORACLE_OCM','SI_INFORMTN_SCHEMA','WMSYS','XS$NULL','DBSFWUSER',\ - 'REMOTE_SCHEDULER_AGENT','PDBADMIN','DGPDB_INT','OPS$ORACLE',\ - 'GGSYS','FLOWS_FILES','APEX_PUBLIC_USER'\ - ) ORDER BY username", - &[], - ) - .await; - log::info!("[oracle] list_databases: fallback done, ok={}", r.is_ok()); - r.map_err(|e| { - log::error!("[oracle] list_databases fallback err: {e}"); - e.to_string() - })? - } - }; - - log::info!("[oracle] list_databases: DONE, {} rows", result.rows.len()); Ok(result.rows.iter().map(|row| DatabaseInfo { name: row.get_string(0).unwrap_or("").to_string() }).collect()) }