接續上篇「角色授權、細粒度權限、獨立授權」三大面向,本文聚焦使用者建立與連線權限、物件授權、系統授權三大實戰差異。
-- Oracle
CREATE USER test IDENTIFIED BY test111; -- 純數字密碼會被拒絕(密碼複雜度驗證)
-- 嘗試連線
CONNECT test/test111;
-- 錯誤:使用者缺乏 CREATE SESSION 權限
必須額外授權:
GRANT CREATE SESSION TO test; -- 或 GRANT CONNECT TO test (舊版角色)
差異點:SQL Server 建立登入/使用者後預設即可連線(視預設資料庫與權限),Oracle 採「最小權限」原則,建立使用者 ≠ 可連線,須額外授 CREATE SESSION。這讓習慣 SQL Server 的 DBA 初次接觸 Oracle 時常踩坑。
test 擁有 product 表 SELECT 權限。test1 無任何權限。test 將 product 的 SELECT 授予 test1(test 非 DBA)。權限管理集中於 DBA,普通使用者無 GRANT OPTION 概念(僅透過角色間接實現)。
GRANT SELECT ON product TO test WITH GRANT OPTION;
test 登入轉授:
GRANT SELECT ON product TO test1;
若 DBA 未加 WITH GRANT OPTION,test 執行轉授會報錯「權限不足」。
test 僅能轉授被明確賦予 WITH GRANT OPTION 的物件與操作(如僅 SELECT,不能轉授 UPDATE/DELETE)。DBA_TAB_PRIVS 記錄 GRANTOR,審計清晰。評價:打破權限管理集中化,提高大型系統設計彈性,但需嚴格管控防止權限蔓延。
類似物件授權,但針對系統級權限(CREATE USER、DROP USER、ALTER SYSTEM 等)。同樣需 WITH ADMIN OPTION 並逐項授權,不支援批次授權。
| 特性 | SQL Server | Oracle |
|---|---|---|
| 建立使用者後預設連線 | 是(視預設資料庫) | 否,需 GRANT CREATE SESSION |
| 密碼複雜度預設檢查 | 無 | 有(拒絕純數字等弱密碼) |
| 普通使用者轉授物件權限 | 不支援 | 支援 (WITH GRANT OPTION) |
| 系統權限轉授 | 透過固定伺服器/資料庫角色 | 支援 (WITH ADMIN OPTION),逐項授權 |
| 權限粒度 | 較粗(如用戶管理為單一權限) | 極細(建立/刪除用戶可分離) |
Oracle 的安全設計哲學是「預設拒絕、顯式授權、細粒度轉授」,適合高合規、多租戶環境;SQL Server 偏向「角色集中管理、易用性優先」,適合中小型企業快速部署。選型時應依組織治理模式決定。