摘要:它提供自動(dòng)身份驗(yàn)證單點(diǎn)登錄。對(duì)于真實(shí)用戶(hù),更需要或身份驗(yàn)證。此外,如果從外部世界訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器,則使用證書(shū)加密會(huì)話(huà)以避免數(shù)據(jù)包嗅探很有用。這種身份驗(yàn)證方法稱(chēng)為代理身份驗(yàn)證。
來(lái)源 | 愿碼(ChainDesk.CN)內(nèi)容編輯
愿碼Slogan | 連接每個(gè)程序員的故事
網(wǎng)站 | http://chaindesk.cn
愿碼愿景 | 打造全學(xué)科IT系統(tǒng)免費(fèi)課程,助力小白用戶(hù)、初級(jí)工程師0成本免費(fèi)系統(tǒng)學(xué)習(xí)、低成本進(jìn)階,幫助BAT一線(xiàn)資深工程師成長(zhǎng)并利用自身優(yōu)勢(shì)創(chuàng)造睡后收入。
官方公眾號(hào) | 愿碼 | 愿碼服務(wù)號(hào) | 區(qū)塊鏈部落
免費(fèi)加入愿碼全思維工程師社群 | 任一公眾號(hào)回復(fù)“愿碼”兩個(gè)字獲取入群二維碼
本文閱讀時(shí)長(zhǎng):11min
PostgreSQL中的身份驗(yàn)證身份驗(yàn)證回答了問(wèn)題:誰(shuí)是用戶(hù)?PostgreSQL支持一些 身份驗(yàn)證方法,包括以下內(nèi)容:
· Trust認(rèn)證:任何可以連接到服務(wù)器的人都有權(quán)使用訪問(wèn)pg_hba.conf配置文件中指定的數(shù)據(jù)庫(kù)/數(shù)據(jù)庫(kù)。通常用于允許在單個(gè)用戶(hù)計(jì)算機(jī)上使用Unix域套接字進(jìn)行連接以訪問(wèn)數(shù)據(jù)庫(kù)。此方法也可以與TCP / IP一起使用,但很少允許從本地主機(jī)以外的任何IP地址進(jìn)行連接。
· Ident認(rèn)證:這通過(guò)從ident服務(wù)器獲取客戶(hù)端的操作系統(tǒng)用戶(hù)名然后使用它來(lái)訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器來(lái)工作。這個(gè)方法建議用于客戶(hù)端計(jì)算機(jī)受系統(tǒng)管理員嚴(yán)格控制的封閉網(wǎng)絡(luò)。
· Peer認(rèn)證:這類(lèi)似于身份,但客戶(hù)端操作系統(tǒng)用戶(hù)名是從內(nèi)核獲得的。
· GSSAPI認(rèn)證:GSSAPI是RFC2743中定義的行業(yè)標(biāo)準(zhǔn)。它提供自動(dòng)身份驗(yàn)證(單點(diǎn)登錄)。
· LDAP認(rèn)證: LDAP服務(wù)器僅用于驗(yàn)證用戶(hù)名/密碼對(duì)。
· 密碼認(rèn)證:有以下三種方法
o SCRAM-SHA-256:PostgreSQL 10中引入的最強(qiáng)的身份驗(yàn)證方法。此方法可防止對(duì)不受信任的連接進(jìn)行密碼嗅探。默認(rèn)密碼驗(yàn)證方法是MD5使用此功能,配置參數(shù) password_encryption應(yīng)更改為 scram-sha-256
o MD5:MD5具有已知的限制,例如:預(yù)先計(jì)算的查找表以破解密碼哈希。此外,MD5只有40億個(gè)獨(dú)特的哈希值。最后,MD5計(jì)算速度非??欤虼吮┝γ艽a猜測(cè)不需要大量的CPU資源。對(duì)于新應(yīng)用程序,建議僅使用scram-sha-256。此外,PostgreSQL提供了從scram-sha-256遷移的方法。
o Password:建議不要使用此密碼,因?yàn)槊艽a以明文格式發(fā)送到服務(wù)器。
要了解身份驗(yàn)證,您需要具有以下信息:
· 身份驗(yàn)證通過(guò)pg_hba.conf文件控制,其中hba代表基于主機(jī)的身份驗(yàn)證。
· 最好了解PostgreSQL發(fā)行版附帶的默認(rèn)初始身份驗(yàn)證設(shè)置
· pg_hba.conf文件通常位于數(shù)據(jù)目錄中,但也可以在postgresql.conf配置文件中指定。
更改身份驗(yàn)證時(shí),您需要發(fā)送一個(gè)SIGHUP信號(hào),這是通過(guò)基于PostgreSQL平臺(tái)的幾種方法完成的。注意,發(fā)送信號(hào)的用戶(hù)應(yīng)該是超級(jí)用戶(hù)、Postgres或Linux發(fā)行版上的根系統(tǒng)用戶(hù);同樣,這取決于平臺(tái)。以下是重新加載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記錄或條目是非常重要的。將會(huì)話(huà)連接pg_hba.conf逐個(gè)與記錄進(jìn)行比較, 直到它被拒絕或到達(dá)配置文件的末尾。
· 最后,檢查PostgreSQL日志文件以確定配置重新加載后是否存在錯(cuò)誤是非常重要的。
PostgreSQL pg_hba.conf與postgresql.conf一樣,pg_hba.conf文件由一組記錄組成,可以使用哈希符號(hào)注釋行,并且忽略空格。pg_hba.conf文件記錄的結(jié)構(gòu)如下:
host_type database user [IP-address| address] [IP-mask] auth-method [auth-options]
host_type查詢(xún)的部分可以是以下內(nèi)容:
· Local:在 Linux系統(tǒng)中使用,允許用戶(hù)使用Unix域套接字連接訪問(wèn)PostgreSQL。
· Host:這是為了允許來(lái)自其他主機(jī)的連接,基于地址或IP地址,使用帶有和不帶SSL加密的TCP / IP。
· Hostssl:這與主機(jī)類(lèi)似,但應(yīng)使用SSL加密連接。
· Hostnossl:這也與主機(jī)類(lèi)似,但不應(yīng)加密連接。
查詢(xún)的數(shù)據(jù)庫(kù)部分是用戶(hù)想要連接的數(shù)據(jù)庫(kù)的名稱(chēng)。為了提高靈活性,您還可以使用以逗號(hào)分隔的列表來(lái)指定多個(gè)數(shù)據(jù)庫(kù),或者可以all用來(lái)指示用戶(hù)可以訪問(wèn)數(shù)據(jù)庫(kù)集群中的所有數(shù)據(jù)庫(kù)。此外,可以使用相同的用戶(hù)和相同的角色值來(lái)指示數(shù)據(jù)庫(kù)名稱(chēng)與用戶(hù)名相同,或者用戶(hù)是與數(shù)據(jù)庫(kù)同名的角色的成員。
查詢(xún)的用戶(hù)部分指定數(shù)據(jù)庫(kù)用戶(hù)的名稱(chēng); 同樣,all值與所有用戶(hù)匹配。IP地址,地址和IP子網(wǎng)掩碼用于標(biāo)識(shí)用戶(hù)所在的主機(jī)嘗試連接??梢允褂?strong>無(wú)類(lèi)別域間路由(CIDR)或點(diǎn)十進(jìn)制表示法指定IP地址。最后,密碼驗(yàn)證方法可以信任,MD5,拒絕等。
以下是配置PostgreSQL身份驗(yàn)證的一些典型示例:
· 示例1:PostgreSQL集群上的任何用戶(hù)都可以使用Unix域套接字訪問(wèn)任何數(shù)據(jù)庫(kù),如以下數(shù)據(jù)庫(kù)表所示:
#TYPE DATABASE USER ADDRESS METHOD Local all all trust
· 示例2:PostgreSQL集群上的任何用戶(hù)都可以使用本地環(huán)回IP地址訪問(wèn)任何數(shù)據(jù)庫(kù),如以下數(shù)據(jù)庫(kù)表所示:
#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拒絕來(lái)自IP地址的所有連接 ,來(lái)自192.168.0.1/24范圍的連接被接受,如下數(shù)據(jù)庫(kù)表所示:
#TYPE DATABASE USER ADDRESS METHOD Host all all 192.168.0.53/32 reject Host all all 192.168.0.1/24 trust
PostgreSQL提供了一種非常方便的方法來(lái)查看pg_hba.conf文件中定義的規(guī)則,方法是提供一個(gè)名為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)偵聽(tīng)地址
該listen_addresses 選項(xiàng)定義于postgresql.conf。PostgreSQL listen_addresses連接設(shè)置用于標(biāo)識(shí)服務(wù)器應(yīng)從客戶(hù)端應(yīng)用程序偵聽(tīng)的IP地址列表。這些listen_addresses是以逗號(hào)分隔的主機(jī)名或IP地址列表。更改這個(gè)值需要重啟服務(wù)器。此外,還應(yīng)注意以下幾點(diǎn):
· 默認(rèn)值為localhost,它限制從網(wǎng)絡(luò)到PostgreSQL集群的直接連接。
· 給出一個(gè)空列表意味著服務(wù)器應(yīng)該只接受Unix套接字連接
· 該值*表示全部
對(duì)于新加入PostgreSQL的開(kāi)發(fā)人員來(lái)說(shuō),忘記更改偵聽(tīng)地址是一個(gè)常見(jiàn)的錯(cuò)誤。如果開(kāi)發(fā)人員忘記更改,并嘗試使用網(wǎng)絡(luò)中的TCP/IP連接到PostgreSQL,則會(huì)出現(xiàn)以下錯(cuò)誤:
Connection refused
Is the server running on host and accepting
TCP/IP connections on port 5432?
身份驗(yàn)證最佳實(shí)踐取決于整個(gè)基礎(chǔ)架構(gòu)設(shè)置,應(yīng)用程序的性質(zhì),用戶(hù)的特征,數(shù)據(jù)敏感性等。例如,以下設(shè)置對(duì)于初創(chuàng)公司很常見(jiàn):數(shù)據(jù)庫(kù)應(yīng)用程序(包括數(shù)據(jù)庫(kù)服務(wù)器)托管在同一臺(tái)計(jì)算機(jī)上,并且僅由公司內(nèi)部用戶(hù)從一個(gè)物理位置使用。
通常,數(shù)據(jù)庫(kù)服務(wù)器使用防火墻與世界隔離;在這種情況下,您可以使用SCRAM-SHA-256身份驗(yàn)證方法并限制IP地址,以便數(shù)據(jù)庫(kù)服務(wù)器接受特定范圍或集合內(nèi)的連接。請(qǐng)注意,重要的是不要使用超級(jí)用戶(hù)或數(shù)據(jù)庫(kù)所有者帳戶(hù)連接到數(shù)據(jù)庫(kù),因?yàn)槿绻藥?hù)被黑客入侵,則整個(gè)數(shù)據(jù)庫(kù)集群將被暴露。
如果是應(yīng)用服務(wù)器 - 業(yè)務(wù)邏輯 - 和數(shù)據(jù)庫(kù)服務(wù)器不在同一臺(tái)機(jī)器上,您可以使用強(qiáng)大的身份驗(yàn)證方法,例如LDAP和Kerberos。但是,對(duì)于數(shù)據(jù)庫(kù)服務(wù)器和應(yīng)用程序位于同一臺(tái)計(jì)算機(jī)上的小型應(yīng)用程序,SCRAM-SHA-256身份驗(yàn)證方法以及將偵聽(tīng)地址限制為localhost可能就足夠了。
要對(duì)應(yīng)用程序進(jìn)行身份驗(yàn)證,建議僅使用一個(gè)用戶(hù),并嘗試使用連接池軟件減少允許的最大連接數(shù),以便更好地調(diào)整PostgreSQL資源。在應(yīng)用業(yè)務(wù)邏輯時(shí)可能需要另一級(jí)別的安全性來(lái)區(qū)分不同的登錄用戶(hù)。對(duì)于真實(shí)用戶(hù),更需要LDAP或Kerberos身份驗(yàn)證。
此外,如果從外部世界訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器,則使用SSL證書(shū)加密會(huì)話(huà)以避免數(shù)據(jù)包嗅探很有用。
您還應(yīng)該記住保護(hù)信任所有l(wèi)ocalhost連接的數(shù)據(jù)庫(kù)服務(wù)器,因?yàn)樵L問(wèn)localhost的任何人都可以訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器。
角色系統(tǒng)和代理身份驗(yàn)證通常,在設(shè)計(jì)應(yīng)用程序時(shí),登錄角色用于配置數(shù)據(jù)庫(kù)連接和連接工具。需要實(shí)現(xiàn)另一級(jí)安全性以確保使用該應(yīng)用程序的用戶(hù)被授權(quán)執(zhí)行某項(xiàng)任務(wù)。該邏輯通常在應(yīng)用程序業(yè)務(wù)邏輯中實(shí)現(xiàn)。
在使用事務(wù)塊中的SET SESSION AUTHORIZATION 語(yǔ)句或SET ROLE命令建立或重用連接后,通過(guò)將身份驗(yàn)證委派給另一個(gè)角色,數(shù)據(jù)庫(kù)的角色系統(tǒng)也可用于部分實(shí)現(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è)置會(huì)話(huà)授權(quán)需要超級(jí)用戶(hù)權(quán)限。允許應(yīng)用程序作為超級(jí)用戶(hù)進(jìn)行連接是危險(xiǎn)的,因?yàn)榭梢苑謩e使用reset role和reset session命令重置set session authorization和set role命令,從而允許應(yīng)用程序獲得超級(jí)用戶(hù)權(quán)限。
為了了解如何使用PostgreSQL角色系統(tǒng)來(lái)實(shí)現(xiàn)身份驗(yàn)證和授權(quán),我們將使用角色系統(tǒng)和汽車(chē)門(mén)戶(hù)應(yīng)用程序。在汽車(chē)門(mén)戶(hù)應(yīng)用程序中,可以將多組用戶(hù)分類(lèi)為web-app-user、public-user、registered-user、seller-user和admin-user。web應(yīng)用程序用戶(hù)用于配置業(yè)務(wù)邏輯連接工具;公共用戶(hù)、注冊(cè)用戶(hù)和賣(mài)家用戶(hù)用于區(qū)分用戶(hù)。公共用戶(hù)組只能訪問(wèn)公共信息,如廣告,但不能作為注冊(cè)用戶(hù)添加評(píng)級(jí),也不能創(chuàng)建廣告,因?yàn)橘u(mài)家用戶(hù)。管理員用戶(hù)是管理應(yīng)用程序所有內(nèi)容的超級(jí)角色,例如過(guò)濾垃圾郵件和刪除不遵守網(wǎng)站策略的用戶(hù)。當(dāng)汽車(chē)門(mén)戶(hù)網(wǎng)站應(yīng)用程序連接到數(shù)據(jù)庫(kù)時(shí),將使用Web用戶(hù)。之后,car_portal將根據(jù)用戶(hù)類(lèi)調(diào)用set role命令。這種身份驗(yàn)證方法稱(chēng)為代理身份驗(yàn)證。
以下示例演示了如何使用角色系統(tǒng)來(lái)實(shí)現(xiàn)代理身份驗(yà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選項(xiàng)web_app_user 不允許用戶(hù)繼承角色成員資格的權(quán)限;但是,web_app_user可以將角色更改為公共用戶(hù),如以下示例所示:
$ 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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39023.html
摘要:現(xiàn)在開(kāi)始創(chuàng)建一個(gè)包并分發(fā)給其他人使用,并確保遵循你迄今為止學(xué)到的標(biāo)準(zhǔn)和最佳實(shí)踐。第步實(shí)踐對(duì)于練習(xí),繼續(xù)編寫(xiě)單元測(cè)試,以完成目前為止所做的實(shí)際任務(wù),特別是你在步驟中所做的練習(xí)。 今天的Web開(kāi)發(fā)與幾年前完全不同,有很多不同的東西可以很容易地阻止任何人進(jìn)入Web開(kāi)發(fā)。這是我們決定制作這些循序漸進(jìn)的視覺(jué)指南的原因之一,這些指南展示了更大的圖景,并讓任何人清楚了解他們?cè)诰W(wǎng)頁(yè)開(kāi)發(fā)中扮演的角色。 ...
摘要:安全生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù)一個(gè)兼容標(biāo)準(zhǔn)的過(guò)濾器一個(gè)生成隨機(jī)數(shù)和字符串的庫(kù)使用生成隨機(jī)數(shù)的庫(kù)一個(gè)安全庫(kù)一個(gè)純安全通信庫(kù)一個(gè)簡(jiǎn)單的鍵值加密存儲(chǔ)庫(kù)一個(gè)結(jié)構(gòu)化的安全層一個(gè)試驗(yàn)的面向?qū)ο蟮陌b庫(kù)一個(gè)掃描文件安全的庫(kù) Security 安全 生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù) HTML Purifier-一個(gè)兼容標(biāo)準(zhǔn)的HTML過(guò)濾器 RandomLib-一個(gè)生成隨機(jī)數(shù)和字...
摘要:安全生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù)一個(gè)兼容標(biāo)準(zhǔn)的過(guò)濾器一個(gè)生成隨機(jī)數(shù)和字符串的庫(kù)使用生成隨機(jī)數(shù)的庫(kù)一個(gè)安全庫(kù)一個(gè)純安全通信庫(kù)一個(gè)簡(jiǎn)單的鍵值加密存儲(chǔ)庫(kù)一個(gè)結(jié)構(gòu)化的安全層一個(gè)試驗(yàn)的面向?qū)ο蟮陌b庫(kù)一個(gè)掃描文件安全的庫(kù) Security 安全 生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫(kù) HTML Purifier-一個(gè)兼容標(biāo)準(zhǔn)的HTML過(guò)濾器 RandomLib-一個(gè)生成隨機(jī)數(shù)和字...
閱讀 3146·2021-11-11 16:54
閱讀 2327·2021-09-04 16:48
閱讀 3230·2019-08-29 16:08
閱讀 655·2019-08-29 15:13
閱讀 1355·2019-08-29 15:09
閱讀 2677·2019-08-29 12:45
閱讀 1938·2019-08-29 12:12
閱讀 462·2019-08-26 18:27