วิธีการกำหนดค่า postgresql เป็นครั้งแรก?


197

ฉันเพิ่งติดตั้ง postgresql และฉันระบุรหัสผ่าน x ระหว่างการติดตั้ง เมื่อฉันพยายามที่จะทำcreatedbและระบุรหัสผ่านใด ๆ ที่ฉันได้รับข้อความ:

createdb: ไม่สามารถเชื่อมต่อกับฐานข้อมูล postgres: FATAL: การตรวจสอบรหัสผ่านล้มเหลวสำหรับผู้ใช้

createuserสำหรับเดียวกัน

ฉันจะเริ่มได้อย่างไร ฉันสามารถเพิ่มตัวเองเป็นผู้ใช้ในฐานข้อมูลได้หรือไม่?



4
นี่เป็นคำถามเดียวกับที่ถามในอีกหนึ่งปีต่อมา แต่ฉันเชื่อว่าอันนี้มีคำตอบหลักที่อันตราย คุณไม่ควรตั้งค่าpostgresผู้ใช้ มันเป็นSUของ PostgreSQL และมันจะเปิดให้คุณเข้าสู่ระบบ - โจมตีมัน สร้างผู้ใช้ขั้นสูงรายอื่นและจองการล็อกpostgresสำหรับผู้ดูแลระบบ UNIX ด้วยรูท
Evan Carroll

คำตอบ:


329

คำตอบอื่น ๆ ไม่พอใจกับฉันอย่างสมบูรณ์ นี่คือสิ่งที่ใช้ได้กับ postgresql-9.1 บน Xubuntu 12.04.1 LTS

  1. เชื่อมต่อกับฐานข้อมูลเริ่มต้นด้วยผู้ใช้ postgres:

    sudo -u postgres psql template1

  2. ตั้งรหัสผ่านสำหรับผู้ใช้ postgres จากนั้นออกจาก psql (Ctrl-D):

    ALTER USER postgres ด้วยรหัสผ่านที่เข้ารหัส 'xxxxxxx';

  3. แก้ไขpg_hba.confไฟล์:

    sudo vim /etc/postgresql/9.1/main/pg_hba.conf

    และเปลี่ยน "เพียร์" เป็น "md5" บนบรรทัดที่เกี่ยวข้องกับ postgres:

    ท้องถิ่น      postgres      peer md5

    ที่จะรู้ว่าสิ่งที่รุ่นของ PostgreSQL /etc/postgresqlคุณกำลังเรียกดูสำหรับโฟลเดอร์รุ่นภายใต้ นอกจากนี้คุณสามารถใช้นาโนหรือเครื่องมือแก้ไขอื่น ๆ แทน VIM

  4. รีสตาร์ทฐานข้อมูล:

    sudo /etc/init.d/postgresql รีสตาร์ท

    (ที่นี่คุณสามารถตรวจสอบว่ามันทำงานร่วมกับpsql -U postgres)

  5. สร้างผู้ใช้ที่มีชื่อเดียวกับคุณ (เพื่อค้นหาคุณสามารถพิมพ์whoami):

    sudo createuser -U postgres -d -e -E -l -P -r -s <my_name>

    ตัวเลือกบอก postgresql เพื่อสร้างผู้ใช้ที่สามารถเข้าสู่ระบบสร้างฐานข้อมูลสร้างบทบาทใหม่เป็น superuser และจะมีรหัสผ่านที่เข้ารหัส คนที่สำคัญจริงๆ -P -E เพื่อที่คุณจะถูกขอให้พิมพ์รหัสผ่านที่จะถูกเข้ารหัสและ -d createdbเพื่อให้คุณสามารถทำ

    ระวังรหัสผ่าน : มันจะถามคุณสองครั้งรหัสผ่านใหม่ (สำหรับผู้ใช้ใหม่) ซ้ำแล้วซ้ำอีกครั้งเมื่อรหัสผ่าน postgres (หนึ่งที่ระบุไว้ในขั้นตอนที่ 2)

  6. แก้ไขpg_hba.confไฟล์อีกครั้ง(ดูขั้นตอนที่ 3 ด้านบน) และเปลี่ยน "เพียร์" เป็น "md5" ในบรรทัดที่เกี่ยวข้องกับผู้ใช้อื่น ๆ "ทั้งหมด":

    ท้องถิ่น      ทุก     เพียร์ md5

  7. รีสตาร์ท (เช่นในขั้นตอนที่ 4) และตรวจสอบว่าคุณสามารถเข้าสู่ระบบโดยไม่มี -U postgres:

    แม่แบบ psql 1

    โปรดทราบว่าถ้าคุณทำเพียงอย่างเดียวpsqlมันจะล้มเหลวเนื่องจากมันจะพยายามเชื่อมต่อคุณกับฐานข้อมูลเริ่มต้นที่มีชื่อเหมือนกับคุณ (เช่นwhoami) template1 คือฐานข้อมูลผู้ดูแลระบบที่มาที่นี่ตั้งแต่เริ่มต้น

  8. ตอนนี้createdb <dbname>ควรทำงาน


ขั้นตอนนี้ใช้งานได้ดีบน Ubuntu 13.10 เช่นกัน เพียงจำ sudo ในขั้นตอนที่ 5 เมื่อสร้างผู้ใช้
David den Haring

2
ใช้งานได้ดีบน Ubuntu 14.04 LTS เช่นกัน
ilhnctn

2
เช่นเดียวกับการจดบันทึกบรรทัดในนั้นpg_hba.confจะต้องเป็นบรรทัดแรกมิฉะนั้นอาจถูกละเว้นได้เนื่องจากกฎอื่น ๆ (pgsql 9.3.5 บน F21) ฉันใช้เวลาพอสมควรในการพิจารณาว่าการไม่แสดงข้อคิดเห็นและการเปลี่ยนแปลงบรรทัดที่ถูกคอมเม้นต์แล้วสำหรับผู้ใช้ postgresql จะไม่ทำอย่างนั้น
dashesy

ฉันคิดว่านี้มีการเปลี่ยนแปลงใน PG 9.4 เนื่องจากฉันมีเพียงแค่local all all peerในจุดที่ 3 md5ซึ่งตอนนี้ผมเปลี่ยนไป ตกลง?
LéoLéopold Hertz 준영

1
โปรดอัปเดตคำตอบเป็น 2017! PostgreSQL 9.6 และ UBUNTU 16 LTS ... ไม่มีวิธีง่าย ๆ ??
Peter Krauss

55

ภายใต้ Linux PostgresQL โดยปกติแล้วจะมีการกำหนดค่าให้ผู้ใช้รูทเข้าสู่ระบบในฐานะผู้ใช้ supergrug postgres postgresจากเชลล์ (คอนโซลหรือ ssh)

$ psql -U postgres

จากนั้นคุณจะสร้างฐานข้อมูลใหม่ตามปกติ:

CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;

pg_hba.confนี้จะทำงานได้โดยไม่ต้องสัมผัส หากคุณต้องการที่จะสามารถทำได้โดยใช้เครื่องมือ GUI ที่บางกว่าเครือข่าย - pg_hba.confแล้วคุณจะต้องไปยุ่งกับ


ฉันกำลังทำงานบน windows ฉันรัน initdb สำหรับไดเรกทอรีของฉันและมีไฟล์การกำหนดค่าอยู่ ตอนนี้ createdb ทำงานได้ แต่เมื่อฉันทดสอบ psql ฉันได้รับข้อความคำเตือน: หน้ารหัสคอนโซล (437) แตกต่างจากหน้ารหัส Windows (1252) อักขระ 8 บิตอาจทำงานไม่ถูกต้อง ดูหน้าอ้างอิง psql "Notes for users Windows" สำหรับรายละเอียด และไม่มีคำสั่งใดทำงาน
Rohit Banga

7
psql: FATAL: Peer authentication failed for user "postgres"แม้กระทั่งกับ sudo
Peter Krauss

คำตอบที่สมบูรณ์แบบฉันไม่ต้องการที่จะสัมผัสกับไฟล์การกำหนดค่าและมันทำงานได้อย่างไม่มีที่ติบน PostgreSQL 10.10 บน Ubuntu psql -d mydatatabase -U myuserคุณควรจะสามารถที่จะเชื่อมต่อกับหลังจากนั้น
ranu

21

นี่คือทางออกของฉัน:

su root
su postgres
psql

4
สิ่งนี้จะทำงานได้ในหลายกรณีเพราะหลายไซต์จะมี pg_hba.conf รับรองความถูกต้องของผู้ใช้ postgres db กับบัญชีระบบ postgres (วิธีเพียร์) การลงชื่อเข้าใช้ที่ประสบความสำเร็จจะขึ้นอยู่กับเนื้อหาของ pg_hba.conf ในแต่ละเว็บไซต์
Reed Sandberg

1
ทำงานให้ฉัน sudo bashฉันแทนที่บรรทัดแรกกับ
eje211

ฉันไม่เข้าใจว่าสิ่งนี้ช่วยได้อย่างไร .. จากความเข้าใจของฉันบันทึกนี้ในรูทและ postgres และเรียกใช้ psql เกิดอะไรขึ้นกันแน่? ขอบคุณ!
olleh

20

มีสองวิธีที่คุณสามารถใช้ได้ ทั้งสองต้องการสร้างผู้ใช้และฐานข้อมูล

  1. ใช้ CreateUser และ createdb ,

    $ sudo -u postgres createuser --superuser $USER
    $ createdb mydatabase
    $ psql -d mydatabase
  2. ใช้คำสั่งการบริหาร SQL และเชื่อมต่อด้วยรหัสผ่านผ่าน TCP

    $ sudo -u postgres psql postgres

    และจากนั้นในเปลือก psql

    CREATE ROLE myuser LOGIN PASSWORD 'mypass';
    CREATE DATABASE mydatabase WITH OWNER = myuser;

    จากนั้นคุณสามารถเข้าสู่ระบบ

    $ psql -h localhost -d mydatabase -U myuser -p <port>

    หากคุณไม่รู้จักพอร์ตคุณสามารถรับมันได้เสมอโดยเรียกใช้สิ่งต่อไปนี้ในฐานะpostgresผู้ใช้

    SHOW port;

    หรือ,

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf

Sidenote: postgresผู้ใช้

ฉันไม่แนะนำให้แก้ไขpostgresผู้ใช้

  1. ปกติล็อคจากระบบปฏิบัติการ ไม่มีใครควรจะ "เข้าสู่ระบบ" postgresเพื่อระบบการดำเนินงานที่เป็น postgresคุณควรจะมีรากที่จะได้รับการตรวจสอบเป็น
  2. ปกติจะไม่ได้รับการป้องกันด้วยรหัสผ่านและมอบหมายให้กับระบบปฏิบัติการโฮสต์ นี้เป็นสิ่งที่ดี ตามปกติแล้วหมายถึงในการเข้าสู่ระบบpostgresซึ่งเทียบเท่ากับ PostgreSQL ของ SQL Server SAคุณจะต้องมีสิทธิ์ในการเขียนเพื่อเข้าถึงไฟล์ข้อมูลพื้นฐาน และนั่นหมายความว่าโดยปกติคุณสามารถทำลายความเสียหายได้
  3. โดยการปิดการใช้งานนี้คุณลบความเสี่ยงของการโจมตีด้วยกำลังดุร้ายผ่านชื่อผู้ใช้ระดับสูง การปกปิดและปิดบังชื่อของ superuser นั้นมีข้อดี

ด้วยวิธีแรกผู้ใช้จะได้รับสิทธิพิเศษ ฉันลงเอยด้วยการใช้สิ่งนี้แทนคำสั่งแรก:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
Fabien Snauwaert

@FabienSnauwaert the -sทำให้ผู้ใช้เป็น superuser
Evan Carroll

16

แก้ไข: คำเตือน: โปรดอ่านคำตอบโพสต์โดยอีวานคาร์โรลล์ ดูเหมือนว่าวิธีนี้จะไม่ปลอดภัยและไม่แนะนำ

สิ่งนี้ใช้ได้สำหรับฉันในการติดตั้งUbuntu 14.04 64 บิตมาตรฐาน

ฉันทำตามคำแนะนำพร้อมกับการดัดแปลงเล็กน้อยที่ฉันพบในhttp://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html

  1. ติดตั้ง postgreSQL (หากยังไม่มีในเครื่องของคุณ):

sudo apt-get install postgresql

  1. เรียกใช้psqlโดยใช้ผู้ใช้ postgres

sudo –u postgres psql postgres

  1. ตั้งรหัสผ่านใหม่สำหรับผู้ใช้ postgres:

\password postgres

  1. ออกจาก psql

\q

  1. แก้ไข/etc/postgresql/9.3/main/pg_hba.confและเปลี่ยนแปลง:

#Database administrative login by Unix domain socket local all postgres peer

ถึง:

#Database administrative login by Unix domain socket local all postgres md5

  1. รีสตาร์ท postgreSQL:

sudo service postgresql restart

  1. สร้างฐานข้อมูลใหม่

sudo –u postgres createdb mytestdb

  1. รัน psql ด้วยผู้ใช้ postgres อีกครั้ง:

psql –U postgres –W

  1. แสดงรายการฐานข้อมูลที่มีอยู่ (ฐานข้อมูลใหม่ของคุณควรจะอยู่ในขณะนี้):

\l


1
ฉัน downvoted เพราะฉันคิดว่าการเปิดใช้งานpostgresผู้ใช้เป็นความคิดที่ไม่ดี stackoverflow.com/a/41604969/124486
Evan Carroll

4
Note: textdb is the database which you are going to explore with 'alex' user 

root@kalilinux:~# sudo su - postgres 
postgres=#  psql   
postgres=#  create database testdb;
postgres=#  create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`

3

คุณอาจต้องอัปเดตpg_hba.confไฟล์ของคุณ ไฟล์นี้ควบคุมสิ่งที่ผู้ใช้สามารถเข้าสู่ระบบจากที่อยู่ IP ใด ๆ ฉันคิดว่าผู้ใช้ postgres นั้นถูกล็อคโดยค่าเริ่มต้น


2
สำหรับ RHEL6.4 และ Postgres 8.4 /var/lib/pgsql/data/pg_hba.confไฟล์นั้นถูกตั้งอยู่ใน เปลี่ยนidentไปtrustสำหรับhost(และlocalถ้าคุณกำลังใช้ SSH)
DavidG

3

หากคุณใช้ macOS เหมือนฉันคุณอาจไม่มีผู้ใช้ postgres

เมื่อพยายามเรียกใช้sudo -u postgres psqlฉันพบข้อผิดพลาดsudo: unknown user: postgres

โชคดีที่มีไฟล์ปฏิบัติการที่ postgres จัดเตรียมไว้ให้

createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick

จากนั้นฉันก็สามารถเข้าถึงได้psqlโดยไม่มีปัญหา

psql
psql (10.2)
Type "help" for help.

nick=#

หากคุณกำลังสร้างอินสแตนซ์ postgres ใหม่ตั้งแต่เริ่มต้นนี่คือขั้นตอนที่ฉันทำ ฉันใช้พอร์ตที่ไม่ใช่ค่าเริ่มต้นดังนั้นฉันจึงสามารถเรียกใช้สองอินสแตนซ์ได้

mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local

จากนั้นฉันแก้ไข/var/postgres/var-10-local/postgresql.confด้วยพอร์ตที่ฉันต้องการ 5433

/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433

createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433

ทำ!


2

ใน MacOS ฉันทำตามขั้นตอนด้านล่างเพื่อให้ทำงานได้

เป็นครั้งแรกหลังการติดตั้งรับชื่อผู้ใช้ของระบบ

$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser

ตอนนี้คุณได้เข้าสู่ระบบและคุณสามารถสร้างฐานข้อมูล

postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT

0

เพียงเรียกดูไดเรกทอรีการติดตั้งของคุณและเรียกใช้ไฟล์นี้ "pg_env.bat" ดังนั้นหลังจากไปที่โฟลเดอร์ bin และดำเนินการ pgAdmin.exe สิ่งนี้จะต้องใช้งานได้อย่างไม่ต้องสงสัย!

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