天天看點

PG-資料庫安全

PostgreSQL資料庫安全

安全等級

TCSEC(Trusted Computer System Evaluation Criteria)将計算機系統的安全劃分為4個等級、7個級别。

四個大類:D,C,B和A,其中部門A具有最高的安全性。每個類都代表個人或組織對評估系統的信任度存在顯着差異。此外,C,B和A分為一系列詳細分級:C1,C2,B1,B2,B3和A1。總體上,TCSEC分級為:D、C1,C2,B1,B2,B3和A1。

分類

  • D:最小保護(“Minimal protection”)
    • 預留給那些已經過評估但未能滿足更高分部要求的系統
  • C:自主保護(“Discretionary protection”)
    • C1 - 任意安全保護
      • 識别和認證
      • 分離使用者和資料
      • 自主通路控制(DAC)能夠以個人為基礎實施通路限制
      • 所需的系統文檔和使用者手冊
    • C2 - 受控通路保護
      • 更細緻的DAC
      • 通過登入程式進行個人問責
      • 審計跟蹤
      • 對象重用
      • 資源隔離
      • 舉一個系統例子是HP-UX
  • B:強制性保護(“Mandatory protection”)
    • B1 - 标記的安全保護
      • 安全政策模型的非正式聲明
      • 資料敏感标簽
      • 對標明主題和對象的強制通路控制(MAC)
      • 标簽出口能力
      • 一些發現的瑕疵必須被移除或以其他方式減輕(不确定)
      • 設計規範和驗證
    • B2 - 結構化保護
      • 安全政策模型明确定義并正式記錄
      • DAC和MAC強制執行擴充到所有主體和客體
      • 對隐蔽存儲通道的出現和帶寬進行分析
      • 仔細建構保護關鍵和非保護關鍵元素
      • 設計和實施可以實作更全面的測試和審查
      • 認證機制得到加強
      • 可信賴的設施管理提供管理者和營運商隔離
      • 強加嚴格的配置管理控制
      • 操作員和管理者角色是分開的。
      • 舉一個系統例子是Multics
    • B3 - 安全域
      • 滿足參考螢幕要求
      • 結構化以排除對安全政策實施不重要的代碼
      • 旨在降低複雜性的重要系統工程
      • 安全管理者角色定義
      • 審計與安全有關的事件
      • 自動即時入侵檢測,通知和響應
      • 用于使用者認證功能的TCB的可信路徑
      • 可信系統恢複程式
      • 對隐蔽定時通道進行分析以确定發生情況和帶寬
      • 這種系統的一個例子是XTS-300的前身XTS-300
  • A: 驗證保護(“Verified protection”)
    • A1 - 已驗證設計
      • 在功能上與B3相同
      • 正式的設計和驗證技術,包括正式的***規範
      • 正式的管理和配置設定程式
      • A1級系統的例子有霍尼韋爾的SCOMP,Aesec的GEMSOS和波音的SNS伺服器。兩個未評估的産品是LOCK平台和取消的DEC VAX安全核心。
    • 超越A1
      • 系統架構表明參考螢幕的自我保護和完整性要求已在可信計算庫(TCB)中實施。
      • 安全測試會自動從正式的***規範或正式的低級規範中生成測試用例。
      • 形式規範和驗證是在可行的情況下使用形式化驗證方法将TCB驗證到源代碼級别的地方。
      • 可信設計環境是TCB設計在隻有可信(清理)人員的受信任設施中的地方。

PG安全體系

PG-資料庫安全

PostgreSQL先通過使用者辨別和認證來驗證通路資料庫的使用者身份,判斷是否為合法使用者及是否具有權限通路資料庫資源。然後通過基于角色的通路控制(Role Based Access Control, RBAC),并使用存取控制清單(ACL)方法控制通路請求和包含資訊。

  • 使用者辨別和認證
    • 最外層的安全保護措施
  • 使用者角色管理
    • 角色是權限的集合,管理者根據角色在系統中承擔的職責配置設定具有不同權限的角色。
  • 資料庫對象的通路控制

使用者辨別和認證

用戶端認證過程

  • 用戶端和服務端的Postmaster程序建立連接配接
  • 用戶端發送請求資訊到守護程序Postmaster
  • Postmaster根據請求資訊檢查配置檔案pg_hba.conf是否允許該用戶端進行連接配接,并把認證方式和必要資訊發送到用戶端
  • 用戶端根據收到的不同認證方式,發送相應的認證資訊給Postmaster
  • Postmaster調用認證子產品對用戶端送來的認證資訊進行認證。若認證通過,初始化一個Postgres程序與用戶端進行通信;否則拒絕繼續會話,關閉連接配接。
PG-資料庫安全

用戶端配置檔案

用戶端認證所需的配置資訊都存儲在$PGDATA/pg_hba.conf檔案。通過若幹空格或制表符分割字段,檔案内容格式如下:

local      DATABASE  USER  METHOD  [OPTIONS]
host       DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
hostssl    DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
hostnossl  DATABASE  USER  ADDRESS  METHOD  [OPTIONS]
           
字段說明
  • local:通過Unix套接字連接配接
  • host:通過TCP/IP進行連接配接
  • hostssl:通過TCP/IP使用SSL的連接配接
  • hostnossl:隻比對在TCP/IP上不使用SSL的連接配接
  • database:聲明比對的資料庫名稱。可以使用逗号分割多個資料庫名稱,也可以使用字首

    @

    聲明一個包含資料庫名的檔案。還可以使用以下預定義的值
    • all:比對所有的資料庫
    • sameuser:比對和請求使用者名同名的資料庫
    • samerole:請求的使用者必須是一個與資料庫同名的角色中的成員
  • user:聲明比對的資料庫使用者
    • 可以指定一個使用者名
    • 使用組名,需要在組名前添加字首

      +

    • 使用

      all

      比對所有使用者
  • ADDRESS:指定比對的主機集
    • 可以使用IP位址和網絡掩碼
    • 可以使用主機名
  • METHOD:連接配接時使用的認證方法
    • trust:無條件允許連接配接
    • reject:無條件地拒絕連接配接
    • md5:提供md5加密的密碼進行認證
    • password:提供一個未加密的密碼認證
    • scram-sha-256:
    • gss:
    • sspi:
    • ident:通過映射檔案pg_ident.conf判斷
    • peer:
    • pam:通過作業系統提供的熱插拔認證子產品服務(PAM)來認證
    • ldap:
    • radius:
    • cert:通過SSL用戶端進行認證
  • OPTIONS:

用戶端認證

PG-資料庫安全

基于角色的權限管理

權限分類

  • 系統權限:規定使用者使用資料庫的權限(連接配接資料庫、建立資料庫、建立使用者等)
  • 對象權限:在表、序列、函數等資料庫對象上執行特殊動作的權限(SELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY、EXECUTE和USAGE等

角色屬性

角色屬性:定義角色擁有的系統權限

  • LOGIN(登入):具有登入屬性的角色才可以作為連接配接資料庫的使用者
  • SUPERUSER(超級使用者):具有SUPERUSER屬性的角色具有系統最高權限
  • CREATEDB(建立資料庫):定義角色是否能建立資料庫
  • CREATEROLE(建立角色):定義角色是否可以建立新角色
  • PASSWORD(密碼):設定角色的密碼
  • INHERIT(繼承):定義一個角色是否繼承它所屬角色的權限
  • CONNECTION LIMIT(連接配接限制):聲明角色可使用的并發連接配接數量

初始化時預設建立一個和作業系統使用者同名的資料庫超級使用者(通常使用postgres使用者)

角色屬性系統表
  • pg_authid系統表可以檢視角色的屬性資訊
Table "pg_catalog.pg_authid"
     Column     |           Type           | Collation | Nullable | desc 
----------------+--------------------------+-----------+----------+---------
 oid            | oid                      |           | not null | 
 rolname        | name                     |           | not null | 角色名稱
 rolsuper       | boolean                  |           | not null | 是否超級使用者
 rolinherit     | boolean                  |           | not null | 是否自動繼承所屬組角色的權限
 rolcreaterole  | boolean                  |           | not null | 是否建立新角色
 rolcreatedb    | boolean                  |           | not null | 是否建立資料庫
 rolcanlogin    | boolean                  |           | not null | 是否可以登入
 rolreplication | boolean                  |           | not null | 是否用于複制
 rolbypas-s-rls   | boolean                  |           | not null | 
 rolconnlimit   | integer                  |           | not null | 限制最大并發連接配接數(-1 無限制)
 rolpassword    | text                     | C         |          | 角色密碼
 rolvaliduntil  | timestamp with time zone |           |          | 密碼失效時間
Indexes:
    "pg_authid_oid_index" UNIQUE, btree (oid), tablespace "pg_global"
    "pg_authid_rolname_index" UNIQUE, btree (rolname), tablespace "pg_global"
Tablespace: "pg_global"

           
  • pg_roles視圖提供了通路資料庫角色資訊
  • pg_auth_members系統表存儲了角色之間的成員關系

對象通路控制

在PG中,建立安全的資料庫連接配接是由使用者辨別和認證技術共同實作,而建立連接配接後的安全通路保護則是由基于角色的對象通路控制。

通路控制清單(ACL)

通路控制清單(Access Contron List, ACL)是對象權限管理和權限檢查的基礎,PG系統通過操作ACL實作對象的通路控制管理。每個對象都有ACL,他存儲了此對象所有授權資訊。