国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PostgreSQL安全性:快速查看身份驗證最佳實踐

SnaiLiu / 715人閱讀

摘要:它提供自動身份驗證單點登錄。對于真實用戶,更需要或身份驗證。此外,如果從外部世界訪問數(shù)據(jù)庫服務(wù)器,則使用證書加密會話以避免數(shù)據(jù)包嗅探很有用。這種身份驗證方法稱為代理身份驗證。

來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯

愿碼Slogan | 連接每個程序員的故事

網(wǎng)站 | http://chaindesk.cn

愿碼愿景 | 打造全學(xué)科IT系統(tǒng)免費課程,助力小白用戶、初級工程師0成本免費系統(tǒng)學(xué)習(xí)、低成本進階,幫助BAT一線資深工程師成長并利用自身優(yōu)勢創(chuàng)造睡后收入。

官方公眾號 | 愿碼 | 愿碼服務(wù)號 | 區(qū)塊鏈部落

免費加入愿碼全思維工程師社群 | 任一公眾號回復(fù)“愿碼”兩個字獲取入群二維碼


本文閱讀時長:11min

PostgreSQL中的身份驗證

身份驗證回答了問題:誰是用戶?PostgreSQL支持一些 身份驗證方法,包括以下內(nèi)容:

· Trust認證:任何可以連接到服務(wù)器的人都有權(quán)使用訪問pg_hba.conf配置文件中指定的數(shù)據(jù)庫/數(shù)據(jù)庫。通常用于允許在單個用戶計算機上使用Unix域套接字進行連接以訪問數(shù)據(jù)庫。此方法也可以與TCP / IP一起使用,但很少允許從本地主機以外的任何IP地址進行連接。

· Ident認證:這通過從ident服務(wù)器獲取客戶端的操作系統(tǒng)用戶名然后使用它來訪問數(shù)據(jù)庫服務(wù)器來工作。這個方法建議用于客戶端計算機受系統(tǒng)管理員嚴格控制的封閉網(wǎng)絡(luò)。

· Peer認證:這類似于身份,但客戶端操作系統(tǒng)用戶名是從內(nèi)核獲得的。

· GSSAPI認證:GSSAPI是RFC2743中定義的行業(yè)標準。它提供自動身份驗證(單點登錄)。

· LDAP認證: LDAP服務(wù)器僅用于驗證用戶名/密碼對。

· 密碼認證:有以下三種方法

o SCRAM-SHA-256:PostgreSQL 10中引入的最強的身份驗證方法。此方法可防止對不受信任的連接進行密碼嗅探。默認密碼驗證方法是MD5使用此功能,配置參數(shù) password_encryption應(yīng)更改為 scram-sha-256

o MD5:MD5具有已知的限制,例如:預(yù)先計算的查找表以破解密碼哈希。此外,MD5只有40億個獨特的哈希值。最后,MD5計算速度非常快,因此暴力密碼猜測不需要大量的CPU資源。對于新應(yīng)用程序,建議僅使用scram-sha-256。此外,PostgreSQL提供了從scram-sha-256遷移的方法。

o Password:建議不要使用此密碼,因為密碼以明文格式發(fā)送到服務(wù)器。

要了解身份驗證,您需要具有以下信息:

· 身份驗證通過pg_hba.conf文件控制,其中hba代表基于主機的身份驗證。

· 最好了解PostgreSQL發(fā)行版附帶的默認初始身份驗證設(shè)置

· pg_hba.conf文件通常位于數(shù)據(jù)目錄中,但也可以在postgresql.conf配置文件中指定。

更改身份驗證時,您需要發(fā)送一個SIGHUP信號,這是通過基于PostgreSQL平臺的幾種方法完成的。注意,發(fā)送信號的用戶應(yīng)該是超級用戶、Postgres或Linux發(fā)行版上的根系統(tǒng)用戶;同樣,這取決于平臺。以下是重新加載PostgreSQL配置的幾種方法的示例:

psql -U postgres -c "SELECT pg_reload_conf();"
sudo service postgresql reload
sudo /etc/init.d/postgresql reload
sudo Kill -HUP 
sudo systemctl reload postgresql-11.service

· 該訂單的 pg_hba.conf記錄或條目是非常重要的。將會話連接pg_hba.conf逐個與記錄進行比較, 直到它被拒絕或到達配置文件的末尾。

· 最后,檢查PostgreSQL日志文件以確定配置重新加載后是否存在錯誤是非常重要的。

PostgreSQL pg_hba.conf

與postgresql.conf一樣,pg_hba.conf文件由一組記錄組成,可以使用哈希符號注釋行,并且忽略空格。pg_hba.conf文件記錄的結(jié)構(gòu)如下:

host_type database user [IP-address| address] [IP-mask] auth-method [auth-options]

host_type查詢的部分可以是以下內(nèi)容:

· Local:在 Linux系統(tǒng)中使用,允許用戶使用Unix域套接字連接訪問PostgreSQL。

· Host:這是為了允許來自其他主機的連接,基于地址或IP地址,使用帶有和不帶SSL加密的TCP / IP。

· Hostssl:這與主機類似,但應(yīng)使用SSL加密連接。

· Hostnossl:這也與主機類似,但不應(yīng)加密連接。

查詢的數(shù)據(jù)庫部分是用戶想要連接的數(shù)據(jù)庫的名稱。為了提高靈活性,您還可以使用以逗號分隔的列表來指定多個數(shù)據(jù)庫,或者可以all用來指示用戶可以訪問數(shù)據(jù)庫集群中的所有數(shù)據(jù)庫。此外,可以使用相同的用戶和相同的角色值來指示數(shù)據(jù)庫名稱與用戶名相同,或者用戶是與數(shù)據(jù)庫同名的角色的成員。

查詢的用戶部分指定數(shù)據(jù)庫用戶的名稱; 同樣,all值與所有用戶匹配。IP地址,地址和IP子網(wǎng)掩碼用于標識用戶所在的主機嘗試連接。可以使用無類別域間路由CIDR)或點十進制表示法指定IP地址。最后,密碼驗證方法可以信任,MD5,拒絕等。

以下是配置PostgreSQL身份驗證的一些典型示例:

· 示例1:PostgreSQL集群上的任何用戶都可以使用Unix域套接字訪問任何數(shù)據(jù)庫,如以下數(shù)據(jù)庫表所示:

#TYPE    DATABASE        USER        ADDRESS     METHOD
Local    all             all                     trust

· 示例2:PostgreSQL集群上的任何用戶都可以使用本地環(huán)回IP地址訪問任何數(shù)據(jù)庫,如以下數(shù)據(jù)庫表所示:

#TYPE     DATABASE     USER     ADDRESS          METHOD
Host      all          all      127.0.0.1/32     trust
host      all          all      ::1/128          trust

· 示例3:192.168.0.53拒絕來自IP地址的所有連接 ,來自192.168.0.1/24范圍的連接被接受,如下數(shù)據(jù)庫表所示:

#TYPE    DATABASE    USER        ADDRESS                METHOD
Host     all         all         192.168.0.53/32         reject
Host     all         all         192.168.0.1/24          trust

PostgreSQL提供了一種非常方便的方法來查看pg_hba.conf文件中定義的規(guī)則,方法是提供一個名為pg_hba_file_rules的視圖,如下所示:

postgres=# SELECT row_to_json(pg_hba_file_rules, true) FROM pg_hba_file_rules limit 1;
       row_to_json 
-------------------------
 {"line_number":84, +
  "type":"local", +
  "database":["all"], +
  "user_name":["all"], +
  "address":null, +
  "netmask":null, +
  "auth_method":"trust",+
  "options":null, +
  "error":null}
(1 row)
偵聽地址

該listen_addresses 選項定義于postgresql.conf。PostgreSQL listen_addresses連接設(shè)置用于標識服務(wù)器應(yīng)從客戶端應(yīng)用程序偵聽的IP地址列表。這些listen_addresses是以逗號分隔的主機名或IP地址列表。更改這個值需要重啟服務(wù)器。此外,還應(yīng)注意以下幾點:

· 默認值為localhost,它限制從網(wǎng)絡(luò)到PostgreSQL集群的直接連接。

· 給出一個空列表意味著服務(wù)器應(yīng)該只接受Unix套接字連接

· 該值*表示全部

對于新加入PostgreSQL的開發(fā)人員來說,忘記更改偵聽地址是一個常見的錯誤。如果開發(fā)人員忘記更改,并嘗試使用網(wǎng)絡(luò)中的TCP/IP連接到PostgreSQL,則會出現(xiàn)以下錯誤:

Connection refused
Is the server running on host and accepting
TCP/IP connections on port 5432?

認證最佳實踐

身份驗證最佳實踐取決于整個基礎(chǔ)架構(gòu)設(shè)置,應(yīng)用程序的性質(zhì),用戶的特征,數(shù)據(jù)敏感性等。例如,以下設(shè)置對于初創(chuàng)公司很常見:數(shù)據(jù)庫應(yīng)用程序(包括數(shù)據(jù)庫服務(wù)器)托管在同一臺計算機上,并且僅由公司內(nèi)部用戶從一個物理位置使用。

通常,數(shù)據(jù)庫服務(wù)器使用防火墻與世界隔離;在這種情況下,您可以使用SCRAM-SHA-256身份驗證方法并限制IP地址,以便數(shù)據(jù)庫服務(wù)器接受特定范圍或集合內(nèi)的連接。請注意,重要的是不要使用超級用戶或數(shù)據(jù)庫所有者帳戶連接到數(shù)據(jù)庫,因為如果此帳戶被黑客入侵,則整個數(shù)據(jù)庫集群將被暴露。

如果是應(yīng)用服務(wù)器 - 業(yè)務(wù)邏輯 - 和數(shù)據(jù)庫服務(wù)器不在同一臺機器上,您可以使用強大的身份驗證方法,例如LDAP和Kerberos。但是,對于數(shù)據(jù)庫服務(wù)器和應(yīng)用程序位于同一臺計算機上的小型應(yīng)用程序,SCRAM-SHA-256身份驗證方法以及將偵聽地址限制為localhost可能就足夠了。

要對應(yīng)用程序進行身份驗證,建議僅使用一個用戶,并嘗試使用連接池軟件減少允許的最大連接數(shù),以便更好地調(diào)整PostgreSQL資源。在應(yīng)用業(yè)務(wù)邏輯時可能需要另一級別的安全性來區(qū)分不同的登錄用戶。對于真實用戶,更需要LDAP或Kerberos身份驗證。

此外,如果從外部世界訪問數(shù)據(jù)庫服務(wù)器,則使用SSL證書加密會話以避免數(shù)據(jù)包嗅探很有用。

您還應(yīng)該記住保護信任所有l(wèi)ocalhost連接的數(shù)據(jù)庫服務(wù)器,因為訪問localhost的任何人都可以訪問數(shù)據(jù)庫服務(wù)器。

角色系統(tǒng)和代理身份驗證

通常,在設(shè)計應(yīng)用程序時,登錄角色用于配置數(shù)據(jù)庫連接和連接工具。需要實現(xiàn)另一級安全性以確保使用該應(yīng)用程序的用戶被授權(quán)執(zhí)行某項任務(wù)。該邏輯通常在應(yīng)用程序業(yè)務(wù)邏輯中實現(xiàn)。

在使用事務(wù)塊中的SET SESSION AUTHORIZATION 語句或SET ROLE命令建立或重用連接后,通過將身份驗證委派給另一個角色,數(shù)據(jù)庫的角色系統(tǒng)也可用于部分實現(xiàn)此邏輯,如下所示:

postgres=# SELECT session_user, current_user;
 session_user | current_user 
--------------+--------------
 postgres     | postgres
(1 row)

postgres=# SET SESSION AUTHORIZATION test_user;
SET
postgres=> SELECT session_user, current_user;
 session_user | current_user 
--------------+--------------
 test_user    | test_user
(1 row)

設(shè)置角色需要角色成員資格,而設(shè)置會話授權(quán)需要超級用戶權(quán)限。允許應(yīng)用程序作為超級用戶進行連接是危險的,因為可以分別使用reset role和reset session命令重置set session authorization和set role命令,從而允許應(yīng)用程序獲得超級用戶權(quán)限。

為了了解如何使用PostgreSQL角色系統(tǒng)來實現(xiàn)身份驗證和授權(quán),我們將使用角色系統(tǒng)和汽車門戶應(yīng)用程序。在汽車門戶應(yīng)用程序中,可以將多組用戶分類為web-app-user、public-user、registered-user、seller-user和admin-user。web應(yīng)用程序用戶用于配置業(yè)務(wù)邏輯連接工具;公共用戶、注冊用戶和賣家用戶用于區(qū)分用戶。公共用戶組只能訪問公共信息,如廣告,但不能作為注冊用戶添加評級,也不能創(chuàng)建廣告,因為賣家用戶。管理員用戶是管理應(yīng)用程序所有內(nèi)容的超級角色,例如過濾垃圾郵件和刪除不遵守網(wǎng)站策略的用戶。當(dāng)汽車門戶網(wǎng)站應(yīng)用程序連接到數(shù)據(jù)庫時,將使用Web用戶。之后,car_portal將根據(jù)用戶類調(diào)用set role命令。這種身份驗證方法稱為代理身份驗證。

以下示例演示了如何使用角色系統(tǒng)來實現(xiàn)代理身份驗證。第一步是創(chuàng)建角色并分配角色成員身份和權(quán)限,如下所示:

CREATE ROLE web_app_user LOGIN NOINHERIT;
CREATE ROLE public_user NOLOGIN;
GRANT SELECT ON car_portal_app.advertisement_picture, car_portal_app.advertisement_rating , car_portal_app.advertisement TO public_user;
GRANT public_user TO web_app_user;
GRANT USAGE ON SCHEMA car_portal_app TO web_app_user, public_user;

該NOINHERIT選項web_app_user 不允許用戶繼承角色成員資格的權(quán)限;但是,web_app_user可以將角色更改為公共用戶,如以下示例所示:

$ psql car_portal -U web_app_user

car_portal=> SELECT * FROM car_portal_app.advertisement;
ERROR: permission denied for relation advertisement
car_portal=> SET ROLE public_user;
SET
car_portal=> SELECT * FROM car_portal_app.advertisement;
 advertisement_id | advertisement_date | car_id | seller_account_id 
------------------+--------------------+--------+-------------------
(0 rows)

car_portal=> SELECT session_user, current_user;
 session_user | current_user 
--------------+--------------
 web_app_user | public_user
(1 row)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/39023.html

相關(guān)文章

  • 現(xiàn)代后端開發(fā)者必備技能-2018版

    摘要:現(xiàn)在開始創(chuàng)建一個包并分發(fā)給其他人使用,并確保遵循你迄今為止學(xué)到的標準和最佳實踐。第步實踐對于練習(xí),繼續(xù)編寫單元測試,以完成目前為止所做的實際任務(wù),特別是你在步驟中所做的練習(xí)。 今天的Web開發(fā)與幾年前完全不同,有很多不同的東西可以很容易地阻止任何人進入Web開發(fā)。這是我們決定制作這些循序漸進的視覺指南的原因之一,這些指南展示了更大的圖景,并讓任何人清楚了解他們在網(wǎng)頁開發(fā)中扮演的角色。 ...

    eternalshallow 評論0 收藏0
  • php 學(xué)習(xí)指南及技術(shù)干貨

    摘要:安全生成安全的隨機數(shù),加密數(shù)據(jù),掃描漏洞的庫一個兼容標準的過濾器一個生成隨機數(shù)和字符串的庫使用生成隨機數(shù)的庫一個安全庫一個純安全通信庫一個簡單的鍵值加密存儲庫一個結(jié)構(gòu)化的安全層一個試驗的面向?qū)ο蟮陌b庫一個掃描文件安全的庫 Security 安全 生成安全的隨機數(shù),加密數(shù)據(jù),掃描漏洞的庫 HTML Purifier-一個兼容標準的HTML過濾器 RandomLib-一個生成隨機數(shù)和字...

    lifefriend_007 評論0 收藏0
  • php 學(xué)習(xí)指南及技術(shù)干貨

    摘要:安全生成安全的隨機數(shù),加密數(shù)據(jù),掃描漏洞的庫一個兼容標準的過濾器一個生成隨機數(shù)和字符串的庫使用生成隨機數(shù)的庫一個安全庫一個純安全通信庫一個簡單的鍵值加密存儲庫一個結(jié)構(gòu)化的安全層一個試驗的面向?qū)ο蟮陌b庫一個掃描文件安全的庫 Security 安全 生成安全的隨機數(shù),加密數(shù)據(jù),掃描漏洞的庫 HTML Purifier-一個兼容標準的HTML過濾器 RandomLib-一個生成隨機數(shù)和字...

    skinner 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<