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

Oracle 權限管理完整指南:從用戶創建到對象級授權體系

     編輯:Oracle 資料庫基礎

前言

Oracle 採用「最小權限原則」保障數據安全。本文系統梳理用戶生命周期管理、系統權限、對象權限、角色體系、列級授權等核心知識,構建完整權限治理框架。

一、基礎連接與管理員登錄

1. 監聽與實例啟動

# 啟動監聽
lsnrctl start

# 啟動實例
oradim -startup -sid ORCL

2. 登錄方式對比

用戶類型連接命令說明
普通用戶sqlplus username/password@service標準連接
DBA (SYS)sqlplus sys/password@service AS SYSDBA最高權限,可啟動/關閉庫
OS 認證 DBAsqlplus / AS SYSDBA屬於 ORA_DBA 組的 OS 用戶免密登錄

二、用戶創建與基礎權限授予

標準創建流程(四步走)

-- 1. 創建用戶(指定默認/臨時表空間、配額)
CREATE USER app_user IDENTIFIED BY strong_password
  DEFAULT TABLESPACE users
  TEMPORARY TABLESPACE temp
  QUOTA UNLIMITED ON users;

-- 2. 授予創建會話權限(登錄門檻)
GRANT CREATE SESSION TO app_user;

-- 3. 授予創建對象權限(表、視圖、序列等)
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE TO app_user;

-- 4. 授予表空間使用配額(若創建時未指定 UNLIMITED)
ALTER USER app_user QUOTA UNLIMITED ON users;

權限層級說明

  • CREATE SESSION:僅允許登錄,無任何對象操作權限
  • CREATE TABLE:允許在自身 Schema 創建表,但需表空間配額
  • UNLIMITED TABLESPACE:系統權限,繞過所有表空間配額限制(慎用)

三、權限撤銷與查詢

1. 撤銷權限

-- 撤銷系統權限
REVOKE CREATE TABLE FROM app_user;

-- 撤銷對象權限
REVOKE SELECT ON scott.emp FROM app_user;

2. 權限查詢視圖

視圖範圍用途
USER_SYS_PRIVS當前用戶查看自身系統權限
DBA_SYS_PRIVS全庫DBA 審計所有用戶系統權限
USER_TAB_PRIVS當前用戶自身擁有/授予的表權限
ALL_TAB_PRIVS可訪問對象當前用戶可見的所有表權限
DBA_TAB_PRIVS全庫全域對象權限審計
USER_COL_PRIVS當前用戶列級權限詳情

四、對象權限精細控制

1. 基礎對象權限授予

-- 單一權限
GRANT SELECT ON scott.emp TO hr_user;

-- 多權限組合
GRANT SELECT, INSERT, UPDATE, DELETE ON scott.emp TO hr_user;

-- ALL 權限(含 ALTER、INDEX、REFERENCES 等)
GRANT ALL ON scott.dept TO hr_user;

2. 對象權限撤銷

REVOKE UPDATE ON scott.emp FROM hr_user;

3. 列級權限(Column-Level Privileges)

僅支持 SELECT、INSERT、UPDATE,不支持 DELETE

-- 授予特定列查詢權限
GRANT SELECT (empno, ename, deptno) ON scott.emp TO hr_user;

-- 授予特定列更新權限(薪資敏感列限制)
GRANT UPDATE (sal, comm) ON scott.emp TO payroll_user;

-- 查詢列權限
SELECT * FROM USER_COL_PRIVS WHERE TABLE_NAME = 'EMP';

五、角色管理最佳實踐

1. 創建與授予角色

-- 創建應用角色
CREATE ROLE app_read_only;
CREATE ROLE app_read_write;

-- 授予角色權限
GRANT SELECT ON scott.emp TO app_read_only;
GRANT SELECT, INSERT, UPDATE ON scott.emp TO app_read_write;

-- 用戶授予角色
GRANT app_read_only TO user1;
GRANT app_read_write TO user2;

2. 角色優勢

  • 權限分組管理,批量授予/撤銷
  • 應用升級只需調整角色權限,無需逐個用戶操作
  • 支持密碼保護角色:`CREATE ROLE secure_role IDENTIFIED BY pwd`
  • 支持外部認證角色:`CREATE ROLE ext_role IDENTIFIED EXTERNALLY`

六、PUBLIC 權限與安全風險

1. 授予 PUBLIC(所有用戶)

GRANT SELECT ON scott.dept TO PUBLIC;

2. 風險提示

  • PUBLIC 權限會自動遞遞給所有現有及未來用戶
  • 敏感表嚴禁授予 PUBLIC
  • 定期審計:`SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'PUBLIC'`

七、權限管理檢查清單

檢查項目建議頻率風險等級
DBA 賬號是否僅限運維人員月度高
應用用戶是否僅擁有必要權限季度高
PUBLIC 是否持有敏感對象權限月度高
離職人員賬號是否及時鎖定/刪除實時高
表空間配額是否合理限制季度中
列級權限是否用於敏感字段保護半年中

結語

權限管理是資料庫安全的第一道防線。遵循「最小權限、角色分組、定期審計、列級保護」原則,建立標準化授權流程與審計機制,可有效防範數據洩露、誤操作與權限提升風險。

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