場景:ERP 報表自定義平台,用戶需擴充既有報表欄位。傳統做法修改底層表/視圖風險極高,且需同步調整前端報表格式,工程量大。
同義詞方案:
CREATE OR REPLACE SYNONYM rpt_supplier_detail FOR new_rpt_view;核心價值:保障前端可恢復性,大幅降低變更成本。
風險:前端 SQL 直寫表名(SELECT * FROM hr.employees),攻擊者分析 SQL 即可推導資料模型、關聯關係、敏感表名。
同義詞防護:
SELECT * FROM emp_syn)。痛點:規範命名導致物件名極長(如 AD_USER_ROLE_NAME_TRL),每次輸入易錯、可讀性差;縮寫又損可讀性。
同義詞平衡:
CREATE SYNONYM user_role_trl FOR ad_user_role_name_trl;
開發期用短名,運行期透明解析,兼顧規範與效率。
遠端物件建立同義詞後,應用端如同操作本地物件,無需硬編碼 @dblink。DBA 遷移遠端服務時,僅需修改同義詞指向的 DB Link,應用層零感知。
| 類型 | 建議場景 | 避坑提醒 |
|---|---|---|
| PUBLIC | 極少數真正全庫通用物件(如 DUAL 類工具) | 系統已有大量 PUBLIC 同義詞,新增易衝突、難管理,非必要勿用 |
| PRIVATE (SCHEMA) | 應用開發、版本平滑遷移、多版本共存(舊新名同指一物件) | 需具備 CREATE SYNONYM 權限;跨 Schema 建立需 CREATE ANY SYNONYM |
物件尚未建立時即可創建同義詞。DBA 與應用組預約命名空間,雙方並行作業,消除「等表建好才能寫代碼」的串行瓶頸。