一、預設用戶與登入
| 用戶 | 角色 | 預設密碼 | 狀態 |
| SYS | 系統管理員(最高權限) | 安裝時設定 | OPEN |
| SYSTEM | 本地管理員(次高權限) | 安裝時設定 | OPEN |
| SCOTT | 範例用戶 | TIGER | LOCKED |
-- 以 SYSDBA 登入
SQLPLUS / AS SYSDBA
SQLPLUS SYS/PASSWORD AS SYSDBA
-- 一般用戶登入
SQLPLUS SCOTT/TIGER
二、用戶生命週期管理
-- 建立用戶
CREATE USER zhangsan IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
-- 修改密碼
ALTER USER scott IDENTIFIED BY tiger;
-- 鎖定/解鎖
ALTER USER scott ACCOUNT LOCK/UNLOCK;
-- 刪除用戶(含物件)
DROP USER zhangsan CASCADE;
三、系統權限(System Privileges)
1. 常用授權
GRANT CREATE SESSION TO zhangsan; -- 登入權限(必備)
GRANT UNLIMITED TABLESPACE TO zhangsan; -- 表空間配額豁免
GRANT CREATE TABLE TO zhangsan; -- 建表
GRANT CREATE VIEW TO zhangsan; -- 建視圖
GRANT CREATE PROCEDURE TO zhangsan; -- 建程序
GRANT CREATE SEQUENCE TO zhangsan; -- 建序列
GRANT CREATE TRIGGER TO zhangsan; -- 建觸發器
-- 萬用授權(慎用)
GRANT ALL PRIVILEGES TO zhangsan; -- 所有系統權限
2. 撤銷
REVOKE CREATE TABLE FROM zhangsan;
3. 查詢
SELECT * FROM USER_SYS_PRIVS; -- 當前用戶
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ZHANGSAN';
四、物件權限(Object Privileges)
1. 授權語法
GRANT SELECT, INSERT, UPDATE, DELETE ON scott.emp TO zhangsan;
GRANT ALL ON scott.dept TO zhangsan; -- 該物件所有權限
-- 欄位級授權(僅 INSERT/UPDATE)
GRANT INSERT (empno, ename) ON scott.emp TO zhangsan;
GRANT UPDATE (sal) ON scott.emp TO zhangsan;
2. 權限傳遞:WITH GRANT OPTION(級聯)
GRANT SELECT ON scott.emp TO zhangsan WITH GRANT OPTION;
-- zhangsan 可再 GRANT SELECT ON scott.emp TO lisi
-- 管理員 REVOKE zhangsan 時,lisi 權限級聯失效
-- 管理員不可直接 REVOKE lisi
3. 撤銷
REVOKE SELECT ON scott.emp FROM zhangsan;
4. 查詢
SELECT * FROM USER_TAB_PRIVS; -- 當前用戶獲授權限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'ZHANGSAN';
SELECT * FROM TABLE_PRIVILEGES WHERE GRANTEE = 'ZHANGSAN';
五、角色(Role)管理
1. 建立與授權
CREATE ROLE myrole [IDENTIFIED BY password];
GRANT CREATE SESSION, CREATE TABLE TO myrole;
GRANT myrole TO zhangsan;
-- 角色可授予角色
GRANT myrole TO another_role;
2. 預定義角色
| 角色 | 包含關鍵權限 |
| CONNECT | CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE, CREATE DATABASE LINK, ALTER SESSION, CREATE CLUSTER |
| RESOURCE | CREATE TABLE, CREATE TRIGGER, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TYPE, CREATE OPERATOR, CREATE INDEXTYPE, CREATE CLUSTER |
| DBA | 所有系統權限 + WITH ADMIN OPTION |
| EXP_FULL_DATABASE / IMP_FULL_DATABASE | 完整導出/導入權限 |
3. 角色啟用/禁用(Session 級)
SET ROLE ALL; -- 啟用所有無密碼角色
SET ROLE NONE; -- 禁用所有角色
SET ROLE myrole IDENTIFIED BY pwd; -- 啟用特定密碼角色
SET ROLE ALL EXCEPT myrole; -- 禁用特定角色
4. 預設角色(登入自動啟用)
ALTER USER zhangsan DEFAULT ROLE ALL;
ALTER USER zhangsan DEFAULT ROLE myrole, another_role;
ALTER USER zhangsan DEFAULT ROLE ALL EXCEPT myrole;
ALTER USER zhangsan DEFAULT ROLE NONE;
5. 查詢
SELECT * FROM DBA_ROLES; -- 所有角色
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'ZHANGSAN';
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'MYROLE';
六、系統權限傳遞:WITH ADMIN OPTION(非級聯)
GRANT CREATE TABLE TO zhangsan WITH ADMIN OPTION;
-- zhangsan 可 GRANT CREATE TABLE TO lisi
-- 管理員 REVOKE zhangsan 時,lisi 權限保留(非級聯)
-- 管理員可直接 REVOKE lisi
七、關鍵差異總結表
| 特性 | 系統權限 + ADMIN OPTION | 物件權限 + GRANT OPTION |
| 適用對象 | 系統權限、角色 | 物件權限 |
| 傳遞機制 | 非級聯 | 級聯 |
| 收回上游影響下游 | 不影響 | 下游同步失效 |
| 管理員直接收回下游 | 可 | 不可(需先斷開上游) |
八、實務稽核查詢腳本
-- 完整權限報表
SELECT
dp.grantee,
dp.privilege,
dp.admin_option,
'SYS' AS priv_type
FROM dba_sys_privs dp
UNION ALL
SELECT
dtp.grantee,
dtp.privilege,
dtp.grantable AS admin_option,
'OBJ' AS priv_type
FROM dba_tab_privs dtp
ORDER BY 1, 4, 2;
九、最佳實踐原則
- 最小權限原則:僅授予業務必需權限,避免
GRANT ALL、DBA 給應用帳號。
- 角色封裝權限:按職能建立角色(
APP_READONLY, APP_DEVELOPER, APP_DBA),授予角色而非散發權限。
- 嚴控 WITH GRANT/ADMIN OPTION:僅授予受信任的管理帳號,定期稽核傳遞鏈。
- 預設角色最小化:
DEFAULT ROLE NONE,應用程式登入後 SET ROLE app_role 顯式啟用。
- 定期稽核:每月跑權限報表,比對基線,異變告警。
總結
Oracle 權限體系以「系統權限控制能力、物件權限控制資料、角色封裝批次授予」為核心。掌握 ADMIN OPTION(非級聯)與 GRANT OPTION(級聯)的本質差異,配合角色分層、最小授權、定期稽核,即可構建安全、可控、可審計的資料庫權限治理體系。