ฉันจะให้ pg_dump ตรวจสอบสิทธิ์อย่างถูกต้องได้อย่างไร


100

ฉันได้พยายามใช้ตัวแปรโฮสต์PGPASSWORDและ.pgpassและค่าของทั้งสองจะช่วยให้ฉันในการตรวจสอบกับฐานข้อมูล ฉันมีchmod'd .pgpassสิทธิ์ที่เหมาะสมและยังพยายาม:

export PGPASSWORD=mypass and PGPASSWORD=mypass

รหัสผ่านมีข้อ\แม้ว่าฉันกำลังห่อหุ้มไว้ในเครื่องหมายคำพูดเดียวPGPASS='mypass\'และจะยังไม่รับรองความถูกต้อง

ฉันกำลังวิ่ง:

pg_dump dbname -U username -Fc

และฉันยังคงได้รับ

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"

1
ข้อความแสดงข้อผิดพลาดส่วน "... Peer authentication ... " หมายความว่าไม่ได้ใช้การตรวจสอบรหัสผ่านเลย
Milen A.Radev

คำตอบ:


199

โซลูชันด่วน

ปัญหาคือกำลังพยายามทำการpeerรับรองความถูกต้องภายในเครื่องตามชื่อผู้ใช้ปัจจุบันของคุณ -hหากคุณต้องการที่จะใช้รหัสผ่านที่คุณจะต้องระบุชื่อโฮสต์ที่มี

pg_dump dbname -U username -h localhost -F c

คำอธิบาย

เนื่องจากสิ่งต่อไปนี้ในไฟล์ pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

สิ่งนี้บอกให้ Postgres ใช้การpeerตรวจสอบสิทธิ์สำหรับผู้ใช้ในพื้นที่ซึ่งต้องใช้ชื่อผู้ใช้ postgres เพื่อให้ตรงกับชื่อผู้ใช้ระบบปัจจุบันของคุณ บรรทัดที่สองหมายถึงการเชื่อมต่อโดยใช้ชื่อโฮสต์และจะช่วยให้คุณสามารถพิสูจน์ตัวตนด้วยรหัสผ่านผ่านmd5วิธีการ

การกำหนดค่าการพัฒนาที่ต้องการของฉัน

หมายเหตุ : ควรใช้กับเวิร์กสเตชันผู้ใช้คนเดียวเท่านั้น ซึ่งอาจนำไปสู่ช่องโหว่ด้านความปลอดภัยที่สำคัญในเครื่องที่ใช้งานจริงหรือเครื่องที่มีผู้ใช้หลายคน

เมื่อมีการพัฒนากับอินสแตนซ์ postgres trustท้องถิ่นผมชอบที่จะเปลี่ยนวิธีการตรวจสอบในท้องถิ่นของฉันไป สิ่งนี้จะอนุญาตให้เชื่อมต่อกับ postgres ผ่านซ็อกเก็ต unix ในเครื่องในฐานะผู้ใช้ที่ไม่มีรหัสผ่าน สามารถทำได้โดยเพียงแค่เปลี่ยนpeerด้านบนtrustและโหลด postgres ใหม่

# Don't require a password for local connections
local   all             all                                     trust

6
สำหรับใครที่ไม่แน่ใจว่าไฟล์ conf ของคุณอยู่ที่ไหน: ให้ใช้sudo locate pg_hba.conf- ต้องเป็น sudo เนื่องจากผู้ใช้ postgres จะเป็นคนเดียวที่เข้าถึงไดเร็กทอรี (ฉันคิดว่า)
jcollum

คำสั่งของคุณใช้งานได้สำหรับฉัน แต่ฉันไม่สามารถค้นหาได้ว่ามันอยู่ที่ไหนหรือชื่อไฟล์อะไรฉันจะค้นหาไฟล์นั้นได้อย่างไร
Sobhan

หากฉันกำหนดค่า Postgres ของฉันภายใน Docker การตั้งค่านี้จะใช้ได้กับการเชื่อมต่อที่มาจาก localhost ของฉันหรือไม่
Jack Chi

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.