Oracle 安全模型建立在「用戶 → 設定檔 → 權限/角色」三層架構之上。本文系統整理設定檔、用戶、系統/物件權限、角色的建立、修改、查詢、刪除標準語法與實戰範例,並總結核心最佳實踐原則。
-- 限制 CPU/呼叫、邏輯讀取、登入失敗鎖定天數
CREATE PROFILE dev_profile LIMIT
CPU_PER_SESSION 1000
LOGICAL_READS_PER_CALL 2000
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 10
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX 5
PASSWORD_VERIFY_FUNCTION verify_function_11g; -- 自定義複雜度驗證函數
-- 查看特定設定檔所有資源限制
SELECT resource_name, resource_type, limit
FROM dba_profiles
WHERE profile = 'DEV_PROFILE'
ORDER BY resource_type, resource_name;
-- 查看所有設定檔摘要
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_type IN ('KERNEL', 'PASSWORD');
ALTER PROFILE dev_profile LIMIT
CPU_PER_SESSION 4000
CONNECT_TIME 60
SESSIONS_PER_USER 20
LOGICAL_READS_PER_SESSION DEFAULT;
DROP PROFILE dev_profile CASCADE; -- CASCADE 強制移除關聯用戶至 DEFAULT
-- 標準建立:指定預設/臨時表空間、配額、設定檔
CREATE USER app_user IDENTIFIED BY StrongPass#2024
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users
PROFILE dev_profile
ACCOUNT UNLOCK;
-- 僅建立 (預設值)
CREATE USER test_user IDENTIFIED BY test123;
-- 核心屬性
SELECT username, account_status, default_tablespace, temporary_tablespace,
profile, created, lock_date, expiry_date
FROM dba_users
WHERE username = 'APP_USER';
-- 表空間配額
SELECT tablespace_name, max_bytes/1024/1024 AS quota_mb
FROM dba_ts_quotas
WHERE username = 'APP_USER';
-- 解鎖、修改密碼、變更設定檔、調整配額
ALTER USER app_user ACCOUNT UNLOCK;
ALTER USER app_user IDENTIFIED BY NewPass#2024;
ALTER USER app_user PROFILE prod_profile;
ALTER USER app_user QUOTA 500M ON users;
ALTER USER app_user DEFAULT TABLESPACE app_data;
DROP USER app_user CASCADE; -- 刪除用戶及其所有 Schema 物件
-- 常用系統權限分類
-- DDL: CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, CREATE SEQUENCE, CREATE SYNONYM
-- DML: INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE, SELECT ANY TABLE
-- 管理: ALTER SYSTEM, ALTER DATABASE, CREATE USER, DROP USER, GRANT ANY PRIVILEGE
-- 授予 (WITH ADMIN OPTION 允許再授予)
GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO app_user WITH ADMIN OPTION;
GRANT SELECT ANY TABLE TO dba_user;
-- 收回
REVOKE CREATE VIEW FROM app_user;
REVOKE SELECT ANY TABLE FROM dba_user;
-- 常用物件權限: SELECT, INSERT, UPDATE, DELETE, REFERENCES, EXECUTE, INDEX, ALTER, FLASHBACK
-- 授予 (WITH GRANT OPTION 允許再授予)
GRANT SELECT, INSERT, UPDATE ON hr.employees TO app_user WITH GRANT OPTION;
GRANT EXECUTE ON hr.emp_pkg TO app_user;
-- 收回
REVOKE UPDATE ON hr.employees FROM app_user;
REVOKE EXECUTE ON hr.emp_pkg FROM app_user;
-- 普通角色 (需密碼啟用)
CREATE ROLE app_read_only IDENTIFIED BY role_pwd;
-- 外部認證角色 (OS/LDAP)
CREATE ROLE ext_role IDENTIFIED EXTERNALLY;
-- 全域角色 (Enterprise User Security)
CREATE ROLE global_role IDENTIFIED GLOBALLY;
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO app_read_only;
GRANT SELECT ON hr.employees TO app_read_only;
GRANT SELECT ON hr.departments TO app_read_only;
GRANT app_read_only TO app_user;
-- 啟用密碼角色
SET ROLE app_read_only IDENTIFIED BY role_pwd;
REVOKE CREATE VIEW FROM app_read_only;
GRANT CREATE SEQUENCE TO app_read_only;
DROP ROLE app_read_only;
APP_READ, APP_WRITE, APP_ADMIN),授予用戶角色而非零散權限,便於批次變更與審計。FAILED_LOGIN_ATTEMPTS, PASSWORD_LIFE_TIME, PASSWORD_VERIFY_FUNCTION 三件套防禦暴力破解與弱密碼。QUOTA 限制永久表空間使用量,防止單一用戶佔滿磁碟。AUDIT CREATE USER, DROP USER, GRANT, REVOKE, ALTER PROFILE BY ACCESS; 記錄安全相關變更。ALTER USER ... ACCOUNT LOCK;長期未用角色回收;廢棄設定檔 DROP PROFILE ... CASCADE。| 視圖 | 用途 |
|---|---|
| DBA_USERS | 所有用戶屬性、狀態、預設表空間、設定檔 |
| DBA_PROFILES | 設定檔資源限制定義 |
| DBA_TS_QUOTAS | 用戶表空間配額 |
| DBA_SYS_PRIVS | 用戶/角色系統權限 |
| DBA_TAB_PRIVS | 用戶/角色物件權限 |
| DBA_ROLES | 所有角色定義 |
| DBA_ROLE_PRIVS | 用戶/角色擁有的角色 |
| ROLE_SYS_PRIVS | 角色擁有的系統權限 |
| ROLE_TAB_PRIVS | 角色擁有的物件權限 |
| SESSION_PRIVS | 當前會話擁有的系統權限 |
| USER_ROLE_PRIVS | 當前用戶啟用的角色 |
Oracle 安全管理的核心在於「用戶身分認證 → 設定檔資源/密碼管控 → 角色權限聚合 → 物件級精細授權」的層層把關。建立標準化的建立/變更/刪除 SOP,配合定期審計與自動化巡檢 (如掃描 DBA_USERS 找出過期未鎖用戶、DBA_SYS_PRIVS 發現過度授權),能構建合規、可控、可追溯的資料庫安全防線。