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

Oracle 權限管理完整指南:用戶、角色、系統/物件權限、傳遞與稽核

     編輯:Oracle 資料庫基礎

一、預設用戶與登入

用戶角色預設密碼狀態
SYS系統管理員(最高權限)安裝時設定OPEN
SYSTEM本地管理員(次高權限)安裝時設定OPEN
SCOTT範例用戶TIGERLOCKED
-- 以 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. 預定義角色

角色包含關鍵權限
CONNECTCREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE, CREATE DATABASE LINK, ALTER SESSION, CREATE CLUSTER
RESOURCECREATE 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;

九、最佳實踐原則

  1. 最小權限原則:僅授予業務必需權限,避免 GRANT ALL、DBA 給應用帳號。
  2. 角色封裝權限:按職能建立角色(APP_READONLY, APP_DEVELOPER, APP_DBA),授予角色而非散發權限。
  3. 嚴控 WITH GRANT/ADMIN OPTION:僅授予受信任的管理帳號,定期稽核傳遞鏈。
  4. 預設角色最小化:DEFAULT ROLE NONE,應用程式登入後 SET ROLE app_role 顯式啟用。
  5. 定期稽核:每月跑權限報表,比對基線,異變告警。

總結

Oracle 權限體系以「系統權限控制能力、物件權限控制資料、角色封裝批次授予」為核心。掌握 ADMIN OPTION(非級聯)與 GRANT OPTION(級聯)的本質差異,配合角色分層、最小授權、定期稽核,即可構建安全、可控、可審計的資料庫權限治理體系。

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