วิธีการใช้ psql โดยไม่แจ้งรหัสผ่าน?


70

ฉันเขียนสคริปต์เพื่อREINDEXจัดทำดัชนีในฐานข้อมูล นี่คือหนึ่งในนั้น:

echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
    echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
    echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
    exit 1
fi

ปัญหาคือฉันไม่สามารถเรียกใช้สคริปต์นี้ในโหมดสแตนด์อโลน psqlกำลังแจ้งรหัสผ่านทุกครั้งที่ทำงาน นอกจากนี้ยังมีข้อ จำกัด สองประการ:

  1. ฉันไม่สามารถสร้างผู้ใช้ในฐานข้อมูลโดยไม่มีรหัสผ่าน

  2. เพราะREINDEXล็อคตารางฉันควรใช้ระหว่างกันsleep <num>REINDEX

มีวิธีแก้ไขอัตโนมัติหรือไม่?

คำตอบ:


111

คุณมีสี่ตัวเลือกเกี่ยวกับการขอรหัสผ่าน:

  1. ตั้งค่าตัวแปรสภาพแวดล้อม PGPASSWORD สำหรับรายละเอียดโปรดดูคู่มือ:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. ใช้ไฟล์ .pgpass เพื่อเก็บรหัสผ่าน สำหรับรายละเอียดโปรดดูคู่มือ:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. ใช้ "การตรวจสอบความน่าเชื่อถือ" สำหรับผู้ใช้ที่เฉพาะเจาะจง:
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. ใช้ URI การเชื่อมต่อที่มีทุกสิ่ง:
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532

4
ตั้งแต่ PostgreSQL 9.1 นอกจากนี้ยังมีpeerวิธีการตรวจสอบสำหรับการเชื่อมต่อท้องถิ่น ปัจจุบันเฉพาะสำหรับ Linux, BSD, OS X หรือ Solaris (ไม่ใช่ Windows)
Erwin Brandstetter

1
หมายเหตุเกี่ยวกับ.pgpassตัวเลือกนี้คุณยังต้องระบุชื่อผู้ใช้ฐานข้อมูลและชื่อโฮสต์ (หากคุณต้องการตามปกติ) ในpsqlคำสั่ง
raphael

ด้วยความเคารพต่อ 3 คุณจะต้องแก้ไขวิธีการ มันอธิบายที่นี่: gist.github.com/p1nox/4953113
FuzzyAmi

ใช้export PGPASSWORD="your_pw"เพื่อไปรุ่น 1
gies0r

18

ตัวอย่างง่ายๆด้วยPGPASSWORDจะเป็นสิ่งที่ชอบ:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME

หวังว่ามันจะช่วย


4
สวัสดี Ian_H ขอบคุณสำหรับความคิดเห็นของคุณและฉันเห็นด้วยกับคะแนนของคุณ คำตอบที่ได้รับการยอมรับนั้นมีความครอบคลุมมากและนั่นก็แก้ปัญหาของฉันได้ เหตุผลที่ฉันตอบคำถามนี้เพราะมันยังไม่ตรงไปตรงมากับฉันเพราะฉันเชื่อว่าคนอื่นอาจมีความรู้สึกเดียวกัน
pdm

นี่เป็นส่วนเสริมที่ดีสำหรับคำตอบที่ได้รับการยอมรับ - การแจ้งเตือนที่เป็นประโยชน์ที่เราไม่จำเป็นต้องตั้งค่า ENV vars อย่างถาวร
kevlarr

1

ขึ้นอยู่กับการอนุญาตบัญชีของคุณตัวอย่างโดยไม่ระบุฐานข้อมูลอาจล้มเหลวเนื่องจากสิทธิ์ผู้ใช้ถูกตรวจสอบกับฐานข้อมูลที่คุณเชื่อมต่อ มันเป็นการระบุฐานข้อมูลที่ชัดเจนเช่นกัน

# this can fail.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME    

# this is more likely to work, assuming given account has permissions to that database.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME -d YOUR_DATABASE  

0

คำตอบที่เป็นประโยชน์มากในหัวข้อนี้ ฉันแค่เพิ่มสิ่งนี้สำหรับ Ubuntu 18.04:

sudo PGPASSWORD=yourpasswordHere -u postgres psql

สิ่งนี้จะนำคุณไปสู่ ​​postgres โดยไม่ต้องใส่รหัสผ่านโดยไม่ต้องตั้งค่าตัวแปรสภาพแวดล้อมใด ๆ นี่ไม่ใช่การตั้งค่าถาวร


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