表空間、用戶、權限、角色是 Oracle 資料庫安全與儲存管理的四大基石。本文匯總從建立表空間、用戶授權、角色管理、權限傳遞到跨資料庫連線的常用 SQL 指令,並說明關鍵子句用法與最佳實務,供 DBA 速查與實作參考。
-- 刪除舊表空間(含資料檔)
DROP TABLESPACE test INCLUDING CONTENTS AND DATAFILES;
-- 建立新表空間:自動擴展、無上限
CREATE TABLESPACE test
DATAFILE 'D:\Oracle\oradata\test\test.dbf'
SIZE 10M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
-- 授權用戶無限額度
ALTER USER scott QUOTA UNLIMITED ON test;
關鍵子句:
- LOCAL 區塊管理:位圖追蹤,效能優於字典管理
- AUTO 區段空間管理:自動管理自由清單,減少爭用
DROP USER scott CASCADE;
CREATE USER scott
IDENTIFIED BY tiger
DEFAULT TABLESPACE test
TEMPORARY TABLESPACE temp
QUOTA 100M ON test
PROFILE default
ACCOUNT UNLOCK;
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE,
CREATE VIEW, CREATE PROCEDURE, CREATE TRIGGER,
EXP_FULL_DATABASE, IMP_FULL_DATABASE
TO scott;
注意:避免直接授予 DBA 角色給應用用戶,依最小權限原則授予細粒度權限。
-- 在 SQL*Plus 中
@d:\xzsp_hrb_Oracle_doc.sql
CREATE ROLE manager;
GRANT CREATE TABLE, CREATE VIEW, CREATE SESSION TO manager;
-- 單一物件權限
GRANT SELECT ON employees TO manager;
-- 指定欄位權限
GRANT UPDATE (department_name, location_id) ON departments TO manager;
-- WITH GRANT OPTION:允許受授者再授予他人
GRANT SELECT, INSERT ON departments TO scott WITH GRANT OPTION;
GRANT manager TO scott, xzsp;
ALTER USER scott IDENTIFIED BY tiger;
-- scott 建立的表,scott 必須親自授權(即使 DBA 也無法代授)
CONN scott/tiger
GRANT SELECT ON student TO system WITH GRANT OPTION;
-- system 再轉授
CONN system/manager
GRANT SELECT ON scott.student TO xzsp;
-- system 可撤銷轉授權限
REVOKE SELECT ON scott.student FROM xzsp;
若 A 授權給 B WITH GRANT OPTION,B 再授權給 C。當 A 撤銷 B 的權限時,C 的權限也會連帶失效(級聯撤銷)。
GRANT SELECT ON scott.departments TO PUBLIC;
警示:授予 PUBLIC 等同所有用戶可存取,極謹慎使用。
-- 建立公共 DB Link
CREATE PUBLIC DATABASE LINK hq.acme.com
CONNECT TO remote_user IDENTIFIED BY remote_pwd
USING 'sales_tns_entry';
-- 查詢遠端表
SELECT * FROM emp@hq.acme.com;
| 查詢目的 | DBA 視圖 | ALL 視圖 | USER 視圖 |
|---|---|---|---|
| 所有用戶 | DBA_USERS | ALL_USERS | USER_USERS |
| 系統權限 | DBA_SYS_PRIVS | — | USER_SYS_PRIVS |
| 物件權限 | DBA_TAB_PRIVS | ALL_TAB_PRIVS | USER_TAB_PRIVS |
| 所有角色 | DBA_ROLES | — | — |
| 用戶/角色擁有的角色 | DBA_ROLE_PRIVS | — | USER_ROLE_PRIVS |
DBA_TAB_PRIVS 發現異常授權Oracle 權限體系嚴謹而彈性,掌握「用戶→角色→系統/物件權限」的三層模型,配合 WITH GRANT OPTION、PUBLIC、跨庫 DB Link 等機制,可建立符合企業治理要求的存取控制矩陣。建議將常用授權腳本模組化、參數化,納入變更管理流程,做到有據可查、可追溯、可回滾。