Oracle 安全模型分系統權限 (對數據庫結構操作) 與對象權限 (對具體對象操作)。本文系統講解用戶創建、權限授予/回收、角色管理、表空間配額、密碼修改、權限視圖查詢,構建完整權限治理知識圖譜。
CREATE USER app_dev IDENTIFIED BY strong_password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; -- 12c+ 可用 QUOTA UNLIMITED ON users
SELECT * FROM user_sys_privs; -- 當前用戶系統權限 SELECT * FROM dba_sys_privs WHERE grantee = 'APP_DEV'; -- DBA 查看
REVOKE SELECT, INSERT ON schema.table FROM app_dev [CASCADE CONSTRAINTS]; -- CASCADE CONSTRAINTS: 因回收 REFERENCES 導致外鍵失效時自動刪除外鍵
CREATE ROLE app_read_only; GRANT SELECT ON schema.table1 TO app_read_only; GRANT SELECT ON schema.table2 TO app_read_only; CREATE ROLE app_developer; GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO app_developer; -- 角色授予用戶/角色 GRANT app_read_only TO user1, user2; GRANT app_developer TO user3;
CREATE ROLE secure_role IDENTIFIED BY password; -- 或更安全: IDENTIFIED USING pkg_auth_ctx (PL/SQL 包驗證上下文)
-- 用戶自行修改 ALTER USER app_dev IDENTIFIED BY new_password; -- DBA 修改 (無需舊密碼) ALTER USER app_dev IDENTIFIED BY new_password; -- 密碼驗證函數 (複雜度策略) ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
RESOURCE + CREATE SESSION,生產只讀賬號僅授 SELECT_CATALOG_ROLE 或自定義只讀角色。APP_READ → APP_WRITE → APP_ADMIN,避免直接授系統權限給用戶。DBA_SYS_PRIVS, DBA_TAB_PRIVS, DBA_ROLE_PRIVS 產出權限矩陣報表。REVOKE EXECUTE ON UTL_FILE FROM PUBLIC; 等危險包權限。