首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 安全管理實戰:設定檔、用戶、權限、角色全生命週期操作指南

     編輯:Oracle 教學

Oracle 安全管理實戰:設定檔、用戶、權限、角色全生命週期操作指南

Oracle 安全模型建立在「用戶 → 設定檔 → 權限/角色」三層架構之上。本文系統整理設定檔、用戶、系統/物件權限、角色的建立、修改、查詢、刪除標準語法與實戰範例,並總結核心最佳實踐原則。

1. 設定檔 - 資源與密碼策略容器

建立設定檔

-- 限制 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

2. 用戶管理 - Schema 擁有者與登入主體

建立用戶

-- 標準建立:指定預設/臨時表空間、配額、設定檔
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 物件

3. 權限管理 - 系統權限 vs 物件權限

系統權限 (System Privileges) - 作用於資料庫操作類別

-- 常用系統權限分類
-- 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;

物件權限 (Object Privileges) - 作用於特定 Schema 物件

-- 常用物件權限: 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;

4. 角色管理 - 權限打包與動態授權

建立角色

-- 普通角色 (需密碼啟用)
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;

5. 核心最佳實踐原則

  1. 最小權限原則:用戶僅擁有完成工作所需的最小權限集。開發環境授予 RESOURCE/CREATE SESSION;生產僅授予具體物件權限。
  2. 角色而非直接授權:將權限打包為角色 (如 APP_READ, APP_WRITE, APP_ADMIN),授予用戶角色而非零散權限,便於批次變更與審計。
  3. 設定檔強制密碼策略:FAILED_LOGIN_ATTEMPTS, PASSWORD_LIFE_TIME, PASSWORD_VERIFY_FUNCTION 三件套防禦暴力破解與弱密碼。
  4. 表空間配額控制:新用戶預設無配額,務必 QUOTA 限制永久表空間使用量,防止單一用戶佔滿磁碟。
  5. 審計關鍵操作:AUDIT CREATE USER, DROP USER, GRANT, REVOKE, ALTER PROFILE BY ACCESS; 記錄安全相關變更。
  6. 分離職責:SYS/SYSTEM 僅供 DBA 維護;應用使用專屬 Schema 用戶;唯讀報表使用唯讀角色。
  7. 定期清理:鎖定/過期用戶 ALTER USER ... ACCOUNT LOCK;長期未用角色回收;廢棄設定檔 DROP PROFILE ... CASCADE。

6. 關鍵數據字典視圖速查

視圖用途
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 發現過度授權),能構建合規、可控、可追溯的資料庫安全防線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved