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
- C1 - 任意安全保護
- B:強制性保護(“Mandatory protection”)
- B1 - 标記的安全保護
- 安全政策模型的非正式聲明
- 資料敏感标簽
- 對標明主題和對象的強制通路控制(MAC)
- 标簽出口能力
- 一些發現的瑕疵必須被移除或以其他方式減輕(不确定)
- 設計規範和驗證
- B2 - 結構化保護
- 安全政策模型明确定義并正式記錄
- DAC和MAC強制執行擴充到所有主體和客體
- 對隐蔽存儲通道的出現和帶寬進行分析
- 仔細建構保護關鍵和非保護關鍵元素
- 設計和實施可以實作更全面的測試和審查
- 認證機制得到加強
- 可信賴的設施管理提供管理者和營運商隔離
- 強加嚴格的配置管理控制
- 操作員和管理者角色是分開的。
- 舉一個系統例子是Multics
- B3 - 安全域
- 滿足參考螢幕要求
- 結構化以排除對安全政策實施不重要的代碼
- 旨在降低複雜性的重要系統工程
- 安全管理者角色定義
- 審計與安全有關的事件
- 自動即時入侵檢測,通知和響應
- 用于使用者認證功能的TCB的可信路徑
- 可信系統恢複程式
- 對隐蔽定時通道進行分析以确定發生情況和帶寬
- 這種系統的一個例子是XTS-300的前身XTS-300
- B1 - 标記的安全保護
- A: 驗證保護(“Verified protection”)
- A1 - 已驗證設計
- 在功能上與B3相同
- 正式的設計和驗證技術,包括正式的***規範
- 正式的管理和配置設定程式
- A1級系統的例子有霍尼韋爾的SCOMP,Aesec的GEMSOS和波音的SNS伺服器。兩個未評估的産品是LOCK平台和取消的DEC VAX安全核心。
- 超越A1
- 系統架構表明參考螢幕的自我保護和完整性要求已在可信計算庫(TCB)中實施。
- 安全測試會自動從正式的***規範或正式的低級規範中生成測試用例。
- 形式規範和驗證是在可行的情況下使用形式化驗證方法将TCB驗證到源代碼級别的地方。
- 可信設計環境是TCB設計在隻有可信(清理)人員的受信任設施中的地方。
- A1 - 已驗證設計
PG安全體系
PostgreSQL先通過使用者辨別和認證來驗證通路資料庫的使用者身份,判斷是否為合法使用者及是否具有權限通路資料庫資源。然後通過基于角色的通路控制(Role Based Access Control, RBAC),并使用存取控制清單(ACL)方法控制通路請求和包含資訊。
- 使用者辨別和認證
- 最外層的安全保護措施
- 使用者角色管理
- 角色是權限的集合,管理者根據角色在系統中承擔的職責配置設定具有不同權限的角色。
- 資料庫對象的通路控制
使用者辨別和認證
用戶端認證過程
- 用戶端和服務端的Postmaster程序建立連接配接
- 用戶端發送請求資訊到守護程序Postmaster
- Postmaster根據請求資訊檢查配置檔案pg_hba.conf是否允許該用戶端進行連接配接,并把認證方式和必要資訊發送到用戶端
- 用戶端根據收到的不同認證方式,發送相應的認證資訊給Postmaster
- Postmaster調用認證子產品對用戶端送來的認證資訊進行認證。若認證通過,初始化一個Postgres程序與用戶端進行通信;否則拒絕繼續會話,關閉連接配接。
用戶端配置檔案
用戶端認證所需的配置資訊都存儲在$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:
用戶端認證
基于角色的權限管理
權限分類
- 系統權限:規定使用者使用資料庫的權限(連接配接資料庫、建立資料庫、建立使用者等)
- 對象權限:在表、序列、函數等資料庫對象上執行特殊動作的權限(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,他存儲了此對象所有授權資訊。