openGauss數據庫客户端接入認證詳解
目錄
前言
日常生活工作中,我們經常遇到需要接入認證的場景,如登錄網站、服務器或連接wifi、vpn等等。當一個客户端應用連接一個數據庫服務器時,比如使用各種JDBC/ODBC進行數據訪問或者數據庫遷移場景或從服務器本機使用gsql連接等,會需要指定以哪個數據庫用户名連接。認證是數據庫服務器建立客户端身份的過程,並且服務器決定客户端應用(或者運行客户端應用的用户)是否被允許以請求的數據庫用户名來連接。比如下面一個簡單的jdbc變量例子:
DB_URL = "jdbc:postgresql://192.168.x.x:26000/demo";
USER = "dbuser";
PASS = "Gauss#xxxxx";
認證方式介紹
openGauss提供多種不同的客户端認證方式。
- 基於主機的認證:服務器端根據客户端的IP地址、用户名及要訪問的數據庫來查看配置文件從而判斷用户是否通過認證。主機鑑權允許主機鑑權部分或全部系統用户。適用於系統所有用户或者使用Match指令的子集。
- 口令認證:包括遠程連接的加密口令認證和本地連接的非加密口令認證。使用帳號和口令登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證正在連接的服務器就是需要連接的服務器。可能會有其他服務器冒充真正的服務器,也就是受到“中間人”方式的攻擊。
- SSL加密:使用OpenSSL(開源安全通信庫)提供服務器端和客户端安全連接的環境。用户必須為自己創建一對密鑰,並把公用密鑰放在需要訪問的服務器上。這種級別的認證不僅加密所有傳送的數據,而且避免“中間人”攻擊方式。但是整個登錄的過程可能需要10秒。
以上三種認證方式都需要配置“pg_hba.conf”文件。數據庫安裝後會自動生成默認的這個配置文件一般安裝在$GAUSSHOME/data目錄下,下面我們在介紹一下這個關鍵的配置文件。
配置文件解析
客户端認證是由一個配置文件pg_hba.conf控制,其中的hba即為host-based authentication縮寫,表示基於主機的認證)。可對IPV4、IPV6 和replication privilege(邏輯複製相關,比如從openGauss遷移數據到其他數據庫)的客户端接入進行設置.
示例
TYPE DATABASE USER ADDRESS METHOD
"local" is for Unix domain socket connections only
#表示只允許以安裝時-U參數指定的用户從服務器本機進行連接。
local all all trust
IPv4 local connections:
#表示允許jack用户從10.10.0.50主機上連接到任意數據庫,使用sha256算法對密碼進行加密。
host all jack 10.10.0.50/32 sha256
#表示允許任何用户從10.10.0.0/24網段的主機上連接到任意數據庫,使用sha256算法對密碼進行加密,並且經過SSL加密傳輸。
hostssl all all 10.10.0.0/24 sha256
pg_hba.conf文件的常用格式是一組記錄,每行一條。記錄不能跨行。每條記錄指定一種連接類型、一個客户端 IP 地址範圍(如果和連接類型相關)、一個數據庫名、一個用户名以及對匹配這些參數的連接使用的認證方法。
一條記錄由若干用空格 和/或製表符分隔的域組成。如果域值用雙引號包圍,那麼它可以包含空白。
在數據庫、用户或地址域中 引用一個關鍵字(例如,all或replication)將使該詞失去其特殊 含義,並且只是匹配一個有該名字的數據庫、用户或主機。
第一條匹配連接類型、客户端地址、連接請求的數據庫和用户名的記錄將被用於執行認證。這個過程沒有“落空”或者“後備”的説法:如果選擇了一條記錄而且認證失敗,那麼將不再考慮後面的記錄。如果沒有匹配的記錄,那麼訪問將被拒絕。
參數解釋
下面兩個表對配置參數進行説明。
表 1 參數説明
表 2 認證方式
如何配置
1.以操作系統用户omm登錄數據庫主節點。
2.配置客户端認證方式,允許客户端以“jack”用户(需提前創建)連接到本機,此處遠程連接禁止使用“omm”用户(即數據庫初始化用户)。使用gs_guc 或者直接修改配置文件均可。
例如,下面示例中配置允許IP地址為10.10.0.30的客户端訪問本機。
gs_guc set -N all -I all -h "host all jack 10.10.0.30/32 sha256"
-N all表示openGauss的所有主機。-I all表示主機的所有實例。-h表示指定需要在“pg_hba.conf”增加的語句。10.10.0.30/32表示只允許IP地址為10.10.0.30的主機連接。此處的IP地址不能為openGauss內的IP,在使用過程中,請根據用户的網絡進行配置修改。32表示子網掩碼為1的位數,即255.255.255.255。
這條命令在數據庫主節點實例對應的“pg_hba.conf”文件中添加了一條規則,用於對連接數據庫主節點的客户端進行鑑定。
“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]
因為認證時系統是為每個連接請求順序檢查“pg_hba.conf”裏的記錄的,所以這些記錄的順序是非常關鍵的。在配置“pg_hba.conf”文件時,請依據通訊需求按照格式內容從上至下配置記錄,優先級高的需求需要配置在前面。openGauss和擴容配置的IP優先級最高,用户手動配置的IP請放在這二者之後,如果已經進行的客户配置和擴容節點的IP在同一網段,請在擴容前刪除,擴容成功後再進行配置。
pg_hba.conf中的認證策略越靠前優先級越高,使用gs_guc工具配置時會按一定規則排序將新策略插入到原有認證策略中。配置字段比較順序為:IPADDR/HOSTNAME > HOSTTYPE > DATABASE > USERNAME,即優先比較IPADDR或HOSTNAME,如果無法區分優先級則繼續比較HOSTTYPE,以此類推。對於每個配置字段,通常越嚴格的配置參數優先級越高、排序越靠前,越寬鬆的配置參數優先級越低、排序越靠後,具體如下:
IPADDR:當配置為全0時表示不限制IP,會放在指定具體某個IP地址的策略後面。
DATABASE:當配置為all時表示不限制數據庫,會放在指定具體某個數據庫的策略後面;當數據庫配置為replication時會放在其他策略後面。
USERNAME:當配置為all時表示不限制用户,會放在指定具體某個用户的策略後面。
HOSTTYPE:local > hostssl > hostnossl > host。
因此對於認證規則的配置建議如下: 靠前的記錄有比較嚴格的連接參數和比較弱的認證方法。靠後的記錄有比較寬鬆的連接參數和比較強的認證方法。
一個用户要想成功連接到特定的數據庫,不僅需要通過pg_hba.conf中的規則檢查,還必須要有該數據庫上的CONNECT權限。如果希望控制某些用户只能連接到指定數據庫,賦予/撤銷CONNECT權限通常比在pg_hba.conf中設置規則更為簡單。
常見錯誤
常見的用户認證失敗錯誤提示請參見下表。
🍒如果您覺得博主的文章還不錯或者有幫助的話,請關注一下博主,如果點贊評論收藏就更好啦!謝謝各位大佬給予的支持!
- GaussDB數據類型轉換介紹
- 通過公網連接GaussDB數據庫實例
- GaussDB數據類型介紹
- 如何通過DAS連接GaussDB
- 企業級分佈式數據庫 - GaussDB介紹
- GaussDB 數據庫實驗環境搭建指導
- Tableau連接openGauss實踐
- 以學校數據模型為例,掌握在DAS下使用GaussDB
- openGauss數據庫共享存儲特性簡介
- openGauss數據庫源碼解析系列文章——備份恢復機制:openGauss增量備份技術(上)
- openGauss數據庫客户端接入認證詳解
- Excel連接openGauss數據庫實操
- openGauss數據庫源碼解析系列文章——備份恢復機制:openGauss全量備份技術
- 超市進銷存之openGauss數據庫的應用與實踐
- 在WPS表格裏製作連接到openGauss的實時刷新報表
- openGauss數據庫PostGIS 安裝與使用
- openGauss中Schema賦權小試
- openGauss Cluster Manager RTO Test
- 【我和openGauss的故事】openGauss獲獎項目講解
- openGauss易知易會的幾個實用特性