授權看似簡單,濫授卻隱藏重大風險。Oracle 9i 及之前版本的預定義角色 CONNECT、RESOURCE 存在設計缺陷,若不加審視直接授予,極易導致安全漏洞或資源耗盡。本文剖析風險根源並給出防範對策。
9i 中 CONTAIN 角色包含以下系統權限:
ALTER SESSIONCREATE CLUSTERCREATE DATABASE LINKCREATE SEQUENCECREATE SESSIONCREATE SYNONYMCREATE TABLECREATE VIEWALTER SESSION 的破壞力ALTER SESSION SET cursor_sharing=FORCE,再送出已知會觸發 cursor_sharing=FORCE 下 Bug 的查詢,導致實例崩潰。ALTER SESSION SET hash_area_size=超大值,配合特定查詢佔滿 PGA,嚴重影響整體效能。好消息:Oracle 10g 已修正,CONNECT 僅保留 CREATE SESSION。
UNLIMITED TABLESPACERESOURCE 角色除 CREATE TABLE、CREATE PROCEDURE 等開發權限外,隱含 UNLIMITED TABLESPACE 系統權限(10g 為相容性保留)。
惡意用戶在 SYSTEM 表空間建立大表,快速耗盡系統表空間導致資料庫掛點。此權限無法透過 DBA_SYS_PRIVS 直接查見,極具隱蔽性。
CONNECT、RESOURCE、DBA。GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE TO app_dev_role;ALTER USER ... QUOTA 500M ON users 精確控制空間,拒絕 UNLIMITED TABLESPACE。DBA_SYS_PRIVS、DBA_TAB_PRIVS、DBA_ROLE_PRIVS 核對實際授權。「授權謹慎再謹慎」不是口號,而是防範內部威脅與操作失誤的鋼鐵法則。拆解預定義角色、落實最小權限,才能在便利與安全間取得平衡。