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

DB2 資料庫權限管理全解析:資料庫/物件權限、顯式/隱式/間接授權、LBAC 行列級安全

     編輯:DB2 教學

DB2 權限體系分為資料庫級與物件級,支援顯式 GRANT/REVOKE、隱式自動授權、間接套件授權,v9 新增 LBAC (Label-Based Access Control) 行列級安全。

權限分類

層級權限說明
資料庫級CREATETAB建立表
BINDADD建立套件
CONNECT連線資料庫
CREATE_NOT_FENCED建立非隔離 UDF
IMPLICIT_SCHEMA隱式建立結構描述
LOAD載入資料
QUIESCE_CONNECT存取靜默狀態資料庫
CREATE_EXTERNAL_ROUTINE建立外部程序
物件級CONTROL表/視圖/索引/套件/別名/型別/UDF/序列 完全控制 + 授權他人
DELETE刪除記錄
INSERT插入記錄
SELECT查詢
UPDATE更新記錄
ALTER修改表定義
INDEX建立索引
REFERENCES建立/刪除外鍵
BIND重新綁定套件
EXECUTE執行套件/程序/函數/方法
ALTERIN修改結構描述內物件
CREATEIN在結構描述建立物件
DROPIN刪除結構描述內物件

系統編目視圖:SYSCAT.TABAUTH, COLAUTH, INDEXAUTH, SCHEMAAUTH, ROUTINEAUTH, PACKAGEAUTH

顯式授權 (GRANT/REVOKE)

-- 範例:授予 test1 查詢 gmilne.org
GRANT SELECT ON TABLE gmilne.org TO USER test1

-- 授予群組插入權限
GRANT INSERT ON TABLE gmilne.org TO GROUP db2grp1

-- 授予所有用戶結構描述 DROPIN
GRANT DROPIN ON SCHEMA gmilne TO ALL

-- 撤銷
REVOKE SELECT ON TABLE gmilne.org FROM USER test1
REVOKE INSERT ON TABLE gmilne.org FROM GROUP db2grp1
REVOKE DROPIN ON SCHEMA gmilne FROM ALL

注意:從群組撤銷不影響直接授予個別用戶的相同權限。

隱式授權 (自動隨物件建立)

命令隱式授予權限受惠者
CREATE TABLE該表 CONTROL建立者
CREATE SCHEMACREATEIN/ALTERIN/DROPIN + 授權他人建立者
CREATE VIEW視圖 CONTROL (需擁有所有基礎表 CONTROL)建立者
CREATE DATABASE目錄表 SELECT、資料庫 IMPLICIT_SCHEMA、DBADM (含 CONNECT/CREATETAB/BINDADD/IMPLICIT_SCHEMA/CREATE_NOT_FENCED)建立者 / PUBLIC

刪除物件時隱式權限自動撤銷;顯式撤銷高層權限**不**自動撤銷隱式權限。

間接授權 (套件執行)

  • 套件包含靜態 SQL,用戶僅需套件 EXECUTE 權限即可執行
  • 間接獲得套件內所有靜態 SQL 所需的物件權限
  • 例:套件含 SELECT * FROM org、INSERT INTO test,用戶獲 org SELECT、test INSERT

LBAC 行列級存取控制 (DB2 9 新增)

傳統做法:建立視圖限制存取。LBAC 提供原生行/列級安全策略。

實作範例:人資/經理/組長三層權限

  1. 建立安全標籤元件 (TREE 型):
    CREATE SECURITY LABEL COMPONENT J_DEPT
      TREE ('HR_EXECUTIVE' ROOT,
        'MAN_D11_E21' UNDER 'HR_EXECUTIVE',
        'A00' UNDER 'HR_EXECUTIVE', ...,
        'D11' UNDER 'MAN_D11_E21',
        'E21' UNDER 'MAN_D11_E21')
  2. 定義安全策略:
    CREATE SECURITY POLICY J_DEPT_POLICY
      COMPONENTS J_DEPT
      WITH DB2LBACRULES
      RESTRICT NOT AUTHORIZED WRITE SECURITY LABEL
  3. 建立安全標籤並授予用戶:
    CREATE SECURITY LABEL J_DEPT_POLICY.EXECUTIVE COMPONENT J_DEPT 'HR_EXECUTIVE'
    GRANT SECURITY LABEL J_DEPT_POLICY.EXECUTIVE TO USER Jane FOR ALL ACCESS
    GRANT SECURITY LABEL J_DEPT_POLICY.MANAGE_D11_E21 TO USER Joe FOR ALL ACCESS
    GRANT SECURITY LABEL J_DEPT_POLICY.A00 TO USER Frank FOR READ ACCESS
  4. 修改表加入標籤欄並綁定策略:
    ALTER TABLE EMP ADD COLUMN DEPT_TAG DB2SECURITYLABEL
    ADD SECURITY POLICY J_DEPT_POLICY
  5. 更新各部門標籤值:用 SECLABEL_BY_NAME 依 WORKDEPT 設定

驗證結果

用戶可見部門權限
Jane (執行官)所有ALL ACCESS
Joe (D11/E21 經理)D11, E21ALL ACCESS (含子節點)
Frank (A00 組長)A00READ ONLY

Frank 嘗試 UPDATE 會報 SQL20402N 無 LBAC 憑證。

管理建議

  • 定期稽核 SYSCAT.*AUTH 視圖
  • 善用群組簡化授權管理
  • LBAC 取代視圖實現細粒度安全
  • 文件化權限矩陣,納入合規審計
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved