日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

openGauss数据库客户端接入认证详解

發布時間:2023/12/20 数据库 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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指令的子集。
  • 口令認證:包括遠程連接的加密口令認證和本地連接的非加密口令認證。使用帳號和口令登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證正在連接的服務器就是需要連接的服務器??赡軙衅渌掌髅俺湔嬲姆掌?#xff0c;也就是受到“中間人”方式的攻擊。
  • SSL加密:使用OpenSSL(開源安全通信庫)提供服務器端和客戶端安全連接的環境。用戶必須為自己創建一對密鑰,并把公用密鑰放在需要訪問的服務器上。這種級別的認證不僅加密所有傳送的數據,而且避免“中間人”攻擊方式。但是整個登錄的過程可能需要10秒。
  • 以上三種認證方式都需要配置“pg_hba.conf”文件。數據庫安裝后會自動生成默認的這個配置文件一般安裝在$GAUSSHOME/data目錄下,下面我們在介紹一下這個關鍵的配置文件。

    配置文件解析

    客戶端認證是由一個配置文件pg_hba.conf控制,其中的hba即為host-based authentication縮寫,表示基于主機的認證)??蓪PV4、IPV6 和replication privilege(邏輯復制相關,比如從openGauss遷移數據到其他數據庫)的客戶端接入進行設置.

    示例

    TYPE ?DATABASE ???????USER ???????????ADDRESS ????????????????METHOD"local" is for Unix domain socket connections only#表示只允許以安裝時-U參數指定的用戶從服務器本機進行連接。local ??all ????????????all ????????????????????????????????????trustIPv4 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?參數說明

    參數名稱

    描述

    取值范圍

    local

    表示這條記錄只接受通過Unix域套接字進行的連接。沒有這種類型的記錄,就不允許Unix域套接字的連接。

    只有在從服務器本機使用gsql連接且在不指定-h參數的情況下,才是通過Unix域套接字連接。

    -

    host

    表示這條記錄既接受一個普通的TCP/IP套接字連接,也接受一個經過SSL加密的TCP/IP套接字連接。

    -

    hostssl

    表示這條記錄只接受一個經過SSL加密的TCP/IP套接字連接。

    用SSL進行安全的連接,需要配置申請數字證書并配置相關參數,詳細信息請參見產品文檔用SSL進行安全的TCP/IP連接。

    hostnossl

    表示這條記錄只接受一個普通的TCP/IP套接字連接。

    -

    DATABASE

    聲明記錄所匹配且允許訪問的數據庫。

    • all:表示該記錄匹配所有數據庫。
    • sameuser:表示如果請求訪問的數據庫和請求的用戶同名,則匹配。
    • samerole:表示請求的用戶必須是與數據庫同名角色中的成員。
    • samegroup:與samerole作用完全一致,表示請求的用戶必須是與數據庫同名角色中的成員。
    • 一個包含數據庫名的文件或者文件中的數據庫列表:文件可以通過在文件名前面加前綴@來聲明。文件中的數據庫列表以逗號或者換行符分隔。
    • 特定的數據庫名稱或者用逗號分隔的數據庫列表。

    值replication表示如果請求一個復制鏈接,則匹配,但復制鏈接不表示任何特定的數據庫。如需使用名為replication的數據庫,需在database列使用記錄“replication”作為數據庫名。

    USER

    聲明記錄所匹配且允許訪問的數據庫用戶。

    • all:表明該記錄匹配所有用戶。
    • +用戶角色:表示匹配任何直接或者間接屬于這個角色的成員。

    +表示前綴符號。

    • 一個包含用戶名的文件或者文件中的用戶列表:文件可以通過在文件名前面加前綴@來聲明。文件中的用戶列表以逗號或者換行符分隔。
    • 特定的數據庫用戶名或者用逗號分隔的用戶列表。

    ADDRESS

    指定與記錄匹配且允許訪問的IP地址范圍。

    支持IPv4和IPv6,可以使用如下兩種形式來表示:

    • IP地址/掩碼長度。例如,10.10.0.0/24
    • IP地址子網掩碼。例如,10.10.0.0 255.255.255.0

    以IPv4格式給出的IP地址會匹配那些擁有對應地址的IPv6連接,比如127.0.0.1將匹配IPv6地址 ::ffff:127.0.0.1。

    典型例子: ??172.20.143.89/32???用于一個主機,??172.20.143.0/24???用于一個小型網絡, 10.6.0.0/16用于一個大型網絡。 0.0.0.0/0表示所有 IPv4 地址,并且::0/0表示所有 IPv6 地址。要指定一個單一主機,IPv4 用一個長度為 32 的 CIDR掩碼或者 IPv6 用 長度為 128 的 CIDR 掩碼。在一個網絡地址中,不要省略結尾的零。

    METHOD

    聲明連接時使用的認證方法。

    本產品支持如下幾種認證方式,詳細解釋請參見表2。

    trust、rejectmd5sha256、sm3、cert、gss

    表 2?認證方式

    認證方式

    說明

    trust

    采用這種認證模式時,本產品只完全信任從服務器本機使用gsql且不指定-U參數的連接,此時不需要口令。

    trust認證對于單用戶工作站的本地連接是非常合適和方便的,通常不適用于多用戶環境。如果想使用這種認證方法,可利用文件系統權限限制對服務器的Unix域套接字文件的訪問。要使用這種限制有兩個方法:

    設置參數unix_socket_permissionsunix_socket_group。

    設置參數unix_socket_directory,將Unix域套接字文件放在一個經過恰當限制的目錄里。

    設置文件系統權限只能Unix域套接字連接,它不會限制本地TCP/IP連接。為保證本地TCP/IP安全,openGauss不允許遠程連接使用trust認證方法。

    reject

    無條件地拒絕連接。常用于過濾某些主機。

    md5

    要求客戶端提供一個md5加密的口令進行認證。openGauss保留md5認證和密碼存儲,是為了便于第三方工具的使用。

    MD5加密算法安全性低,存在安全風險,建議使用更安全的加密算法。

    sha256

    要求客戶端提供一個sha256算法加密的口令進行認證,該口令在傳送過程中結合salt(服務器發送給客戶端的隨機數)的單向sha256加密,增強了安全性。

    sm3

    要求客戶端提供一個sm3算法加密口令進行認證,該口令在傳送過程中結合salt(服務器發送給客戶端的隨機數)的單項sm3的加密,增加了安全性。

    cert

    客戶端證書認證模式,此模式需進行SSL連接配置且需要客戶端提供有效的SSL證書,不需要提供用戶密碼。

    該認證方式只支持hostssl類型的規則。

    gss

    使用基于gssapi的kerberos認證。

    該認證方式依賴kerberos server等組件,僅支持openGauss內部通信認證。當前版本暫不支持外部客戶端通過kerberos認證連接。

    開啟openGauss內部kerberos認證會使增加內部節點建連時間,即影響首次涉及內部建連的SQL操作性能,內部連接建立好后, 后續操作不受影響。

    peer

    獲取客戶端所在操作系統用戶名,并檢查與數據庫初始用戶名是否一致。此方式只支持local模式本地連接,并支持通過配置pg_ident.conf建立操作系統用戶與數據庫用戶映射關系。

    假設操作系統用戶名為omm,數據庫初始用戶為dbAdmin,在pg_hba.conf中配置local模式為peer認證:

    ""local ??all ???all ???????peer ???map=mymap

    其中map=mymap指定使用的用戶名映射,并在pg_ident.conf中添加映射名稱為mymap的用戶名映射如下:

    ""# MAPNAME ??????SYSTEM-USERNAME ????????PG-USERNAME

    mymap ???????????????omm ?????????????????????????????????dbAdmin

    說明:

    通過gs_guc reload方式修改pg_hba.conf配置可以立即生效無需重啟數據庫。直接編輯修改pg_ident.conf配置后下次連接時自動生效無需重啟數據庫。

    如何配置

    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中設置規則更為簡單。

    常見錯誤

    常見的用戶認證失敗錯誤提示請參見下表。

    問題現象

    解決方法

    用戶名或密碼錯誤:

    ""FATAL: invalid username/password,login denied

    這條信息說明用戶名或者密碼錯誤,請檢查輸入是否有誤。

    連接的數據庫不存在:

    ""FATAL: database "TESTDB" does not exist

    這條信息說明嘗試連接的數據庫不存在,請檢查連接的數據庫名輸入是否有誤。

    未找到客戶端匹配記錄:

    ""FATAL: no pg_hba.conf entry for host "10.10.0.60", user "ANDYM", database "TESTDB"

    這條信息說明已經連接了服務器,但服務器拒絕了連接請求,因為沒有在它的pg_hba.conf配置文件里找到匹配的記錄。請聯系數據庫管理員在pg_hba.conf配置文件加入用戶的信息。

    在可信方法下禁止遠程連接。

    “FATAL: Forbid remote connection with trust method!”

    使用推薦的sha256認證。

    使用的連接工具不支持sha256

    none of the server’s SASL authentication mechanisms are supported

    修改為使用md5方式連接。

    出于安全考慮,openGauss默認加密方式為sha256,因此需要同步修改數據庫的加密方式:gs_guc set -N all -I all -c "password_encryption_type=1" ,即支持md5和sha256,重啟openGauss生效后需要創建用md5方式加密口令的用戶。同時修改pg_hba.conf,將客戶端連接方式修改為md5。

    沒有復制連接的pg_hba.conf的配置

    FATAL: no pg_hba.conf entry for replication connection from host "127.0.0.1", user "tuser", SSL off

    修改pg_hba.conf的 replication privilege部分添加應記錄. 然后重新reload

    🍒如果您覺得博主的文章還不錯或者有幫助的話,請關注一下博主,如果點贊評論收藏就更好啦!謝謝各位大佬給予的支持!

    總結

    以上是生活随笔為你收集整理的openGauss数据库客户端接入认证详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。