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

Oracle 三大授權模式速查:角色授權、批次腳本、DBA 全表授權

     編輯:Oracle 資料庫基礎

實務上常見三種授權場景:標準角色授權 (最推薦)、批次產生授權腳本 (遷移/同步)、DBA 全表授權 (高風險、慎用)。本文以精簡範例呈現三種模式的核心語法與適用情境,助您快速選擇正確方案。

模式一:標準角色授權 (推薦、可維運)


-- 1. 建立角色
CREATE ROLE role1;

-- 2. 給角色授予系統權限
GRANT SELECT ANY TABLE TO role1;
-- 或多項權限
GRANT CREATE ANY TABLE, CREATE PROCEDURE TO role1;

-- 3. 將角色授予使用者
GRANT role1 TO user_b;

優點:權限集中管理、易審計、支援角色層級回收、符合最小權限原則。
適用:所有生產環境標準授權流程。

模式二:批次產生授權腳本 (遷移/同步專用)

需求:將 Schema A 的所有物件查詢權限批次授予使用者 B。


-- 產生 GRANT 腳本 (在 Schema A 下執行)
SELECT 'GRANT SELECT ON ' || object_name || ' TO target_user;'
FROM   all_objects
WHERE  owner = 'SCHEMA_A'
AND    object_type IN ('TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION')
ORDER  BY object_type, object_name;

操作流程:

  1. 以物件擁有者 (Schema A) 登入執行上述查詢。
  2. 將輸出結果匯出為 .sql 檔案。
  3. 以 DBA 或 Schema A 身分執行該腳本檔。

優點:可版控、可審核、可回滾、支援細粒度物件類型過濾。
注意:新增物件需重新產生腳本,建議納入部署流程自動化。

模式三:DBA 全表授權 (高風險、緊急/測試環境)


-- 授予查詢所有 Schema 所有表的權限
GRANT SELECT ANY TABLE TO user_b;

風險:

  • 包含 SYS、SYSTEM、AUD$ 等敏感字典表。
  • 違反最小權限原則,稽核不通過。
  • 使用者可查詢薪資、個資等機密表。

僅建議場景:開發/測試環境、資料倉庫唯讀分析帳號 (搭配 VPD/OLS 限制)、緊急搶修臨時授權 (事後必須回收)。

快速決策表

場景推薦模式關鍵語法
新應用上線授權模式一 (角色)CREATE ROLE → GRANT → GRANT ROLE
跨 Schema 權限同步模式二 (批次腳本)SELECT 'GRANT...' FROM all_objects
開發自助查詢環境模式三 (慎用)GRANT SELECT ANY TABLE
生產唯讀報表帳號模式一 + VPD/OLS角色 + 細粒度物件權限

進階:批次腳本增強版 (含類型判斷)


SELECT 'GRANT ' ||
       CASE object_type
         WHEN 'TABLE' THEN 'SELECT, INSERT, UPDATE, DELETE, REFERENCES'
         WHEN 'VIEW'  THEN 'SELECT'
         WHEN 'SEQUENCE' THEN 'SELECT'
         WHEN 'PROCEDURE' THEN 'EXECUTE'
         WHEN 'FUNCTION' THEN 'EXECUTE'
         WHEN 'PACKAGE' THEN 'EXECUTE'
         ELSE 'SELECT'
       END ||
       ' ON ' || object_name || ' TO target_user;'
FROM   all_objects
WHERE  owner = 'SCHEMA_A'
AND    object_type IN ('TABLE','VIEW','SEQUENCE','PROCEDURE','FUNCTION','PACKAGE')
ORDER  BY object_type, object_name;

授權無小事,選對模式才能兼顧安全與效率。原則上:「角色為主、腳本為輔、ANY 為最後手段」。

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