使用 SCOTT 等普通用戶登入 Oracle,執行 CREATE VIEW 時報錯:ORA-01031: insufficient privileges(權限不足)。
| 權限 | 用途 | 授予語法 | 風險等級 |
|---|---|---|---|
| CREATE VIEW | 在自己 Schema 建立視圖 | GRANT CREATE VIEW TO user; | 低 |
| CREATE ANY VIEW | 在任意 Schema 建立視圖 | GRANT CREATE ANY VIEW TO user; | 高 |
| SELECT ANY TABLE | 查詢任意表(視圖定義需訪問基表) | GRANT SELECT ANY TABLE TO user; | 高 |
| SELECT ANY DICTIONARY | 查詢資料字典視圖 | GRANT SELECT ANY DICTIONARY TO user; | 中 |
CONN system/password GRANT CREATE VIEW TO scott; GRANT SELECT ANY TABLE TO scott; -- 跨 Schema 查詢基表 GRANT SELECT ANY DICTIONARY TO scott; -- 查詢 DBA_*/ALL_* 視圖
場景:USER1 需建立包含 USER2 表的視圖
-- 切換到目標用戶 CONN scott/tiger -- 測試建立簡單視圖 CREATE OR REPLACE VIEW v_test AS SELECT * FROM dual; -- 測試跨 Schema 視圖(需對應基表權限) CREATE OR REPLACE VIEW v_emp AS SELECT * FROM hr.employees; -- 查詢驗證 SELECT * FROM v_test; SELECT * FROM v_emp;
CREATE VIEW 需要直接授予的權限,角色中的權限不生效(Oracle 安全機制)WITH GRANT OPTIONINHERIT PRIVILEGES,可能影響權限繼承行為