psql: FATAL: “dev” kullanıcısı için eş kimlik doğrulaması başarısız oldu


198

yeni bir kullanıcı oluşturduğumda, ancak veritabanında oturum açamıyor.
Bunu şöyle yaparım:

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

sonra bir veritabanı oluşturun:

postgres@Aspire:/home/XXX$ createdb -O dev test_development

Bundan sonra psql -U dev -W test_developmentgiriş yapmaya çalışıyorum , ancak hatayı alıyorum:

psql: FATAL:  Peer authentication failed for user "dev"

Sorunu çözmeye çalıştım ama başarısız oldum.



Şimdi, yukarıdaki soruların cevaplarını --interactivecreateuser --interactive joe
istemek

Yanıtlar:


311

Deneyin:

psql -U user_name  -h 127.0.0.1 -d db_name

nerede

  • -U veritabanı kullanıcı adı
  • -h yerel sunucunun ana bilgisayar adı / IP'sidir, bu nedenle Unix etki alanı yuvalarından kaçınır
  • -d bağlanacak veritabanı adıdır

Bu daha sonra Unix etki alanı soket bağlantısı yerine Postgresql tarafından bir "ağ" bağlantısı olarak değerlendirilir, dolayısıyla gördüğünüz gibi "yerel" bağlantı olarak değerlendirilmez pg_hba.conf:

local   all             all                                     peer

15
Gregor

9
ne kadar alçakgönüllü bir araç. manuel diyor psql [option...] [dbname [username]], bu yüzden psql dbname usernamesadece işe yarayacağını düşünürdüm ..
djeikyb

2
Benim için de çalıştı. Ben de bu, özellikle ne yaptığınız hakkında bir ipucu yoksa ve sadece sorununuzu çözmek için SO cevabını takip ettiğinizde, yapılandırma dosyalarını değiştirmekten çok daha tercih edilen bir yol olduğunu düşünüyorum.
borisano

1
Bu benim için çalıştı, çok teşekkürler, neden doğru çözüm olduğuna dair bir araştırma yapıyorum. Yine de, başka bir makinedeki bir yapılandırmada psql -U kullanıcı adı -d veritabanı olarak oturum açarım. bu yüzden kabul edilen çözümün duruma bağlı olduğunu düşünüyorum.
Lazarus Yükseliyor

2
İyi cevap. Ben \c glossary john FATAL: Peer authentication failed for user "john"sonra \c glossary john localhost Password for user john: SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".çalıştı ile postgres olarak giriş yaptıktan sonra veritabanı içinde başlamıştı .
look

215

Geçerli UNIX kullanıcısının aynı kullanıcı adına sahip olmasını gerektiren kimlik doğrulama psqlkullanılarak varsayılan olarak UNIX yuvalarına bağlandığı için bağlantınız başarısız oldu . UNIX kullanıcı oluşturmak zorunda kalacak Yani sonra olarak giriş veya kullanım veritabanına erişim için (ve gerektiği değil bir şifre isteyecektir).peerpsqldevdevsudo -u dev psql test_developmentpsql

UNIX kullanıcısını oluşturmak istemiyorsanız veya istemiyorsanız, tıpkı geçici sorgular için veritabanınıza bağlanmak istiyorsanız , psql --host=localhost --dbname=test_development --username=dev(@meyerson yanıtında belirtildiği gibi) kullanarak bir soket bağlantısını zorlamak derhal sorununuzu çözecektir.

Ancak peer yöntemi yerine Unix yuvaları üzerinde parola kimlik doğrulamasını zorunlu kılmak istiyorsanız, aşağıdaki pg_hba.conf* satırını değiştirmeyi deneyin :

itibaren

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          peer

için

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          md5
  • peerUNIX kullanıcısının kimliğine (özgünlüğüne) güveneceği anlamına gelir. Yani bir şifre istemiyorum.

  • md5her zaman bir şifre isteyeceği ve karma işleminden sonra doğrulayacağı anlamına gelir MD5.

Elbette, belirli bir veritabanı veya kullanıcı için daha belirli kurallar oluşturabilirsiniz, bazı kullanıcılar peerparola isterken bazı kullanıcılar da olabilir.

pg_hba.confPostgreSQL'in çalışıp çalışmadığını değiştirdikten sonra , yeniden yükleyerek ( pg_ctl reload) veya yeniden başlatarak ( sudo service postgresql restart) yapılandırmayı yeniden okumasını sağlamanız gerekir .

* Dosya pg_hba.confbüyük olasılıkla/etc/postgresql/9.x/main/pg_hba.conf

Düzenlendi: @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_What yorumları yanıta dahil edilmiştir.


5
Nasıl izin veririm peer VE md5 ? Ayarladığımda md5, artık kullanıcı ile giriş yapamıyorum postgres! Birden çok satır eklemeyi ve virgülle yöntemi ayırmayı denedim, ancak işe yaramadı. Tamam mgoldwassercevabını buldum ve işe yaradı. Ben sadece postgresyöntemi ile kullanıcı için başka bir satır ekledim peer!
Chloe

3
Endişelenmeyin, belirli kullanıcılar için eş kimlik doğrulaması ayarlayabilirsiniz (örneğin, kullanıcı adınız veya posta adresleriniz). Belirli kuralların genel kuralları geçersiz
kıldığı görülüyor

1
Bazı dağıtımlarda dosya burada da bulunabilir:/var/lib/pgsql/9.4/data/pg_hba.conf
Jonas Eicher

2
postgresql'i yeniden başlatmadan bunu yapamaz mısın? pg_user tablosunda yalnızca kimlik doğrulama yöntemini belirleyemez misiniz?
fccoelho

2
Yeniden başlatma yerine yeniden yükleyebilirsiniz. Bu pg_hba tablosunu yeniden yükler. Benim için çalıştı.
Joanis

29

Eş kimlik doğrulaması, postgres işletim sisteminden oturum açma adınızı ister ve bunu kimlik doğrulaması için kullanır. Postgres'te eş kimlik doğrulamasını kullanarak "dev" kullanıcısı olarak oturum açmak için işletim sisteminde "dev" kullanıcısı olmanız da gerekir.

Kimlik doğrulama yöntemlerinin ayrıntılarını Postgresql belgelerinde bulabilirsiniz .

İpucu: Artık hiçbir kimlik doğrulama yöntemi çalışmazsa, sunucunun ağ bağlantısını kesin ve "localhost" için "trust" yöntemini kullanın (ve "trust" yöntemi etkinken sunucunuza ağ üzerinden erişilemediğini bir kez daha kontrol edin).


1
cevaplarınız için teşekkürler. ama devsistem kullanıcısını değiştirirsem hala çalışmıyorXXX
hsming

2
stefan'ın cevabı doğrudur. Düzenlemem incelendiğinde görünür olacak bir bağlantı ekledim, her kimlik doğrulama yönteminin açıklandığı belgelere.
dsh

25

Belirttiğinizde:

psql -U user

peeraksi belirtilmedikçe varsayılan olarak kimlik doğrulaması kullanan UNIX Soketi aracılığıyla bağlanır pg_hba.conf.

Şunları belirleyebilirsiniz:

host    database             user             127.0.0.1/32       md5
host    database             user             ::1/128            md5

geridönüş arabiriminde TCP / IP bağlantısı (IPv4 ve IPv6) almak için databaseve user.

Değişikliklerden sonra postgres'i yeniden başlatmanız veya yapılandırmasını yeniden yüklemeniz gerekir. Modern RHEL / Debian tabanlı dağıtımlarda çalışması gereken yeniden başlatma:

service postgresql restart

Yeniden yükleme aşağıdaki şekilde çalışmalıdır:

pg_ctl reload

ancak komut PATH yapılandırmasına bağlı olarak farklılık gösterebilir - postgres'in kurulma şekline bağlı olarak farklı olabilecek mutlak yol belirtmeniz gerekebilir.

Sonra şunları kullanabilirsiniz:

psql -h localhost -U user -d database

TCP / IP üzerinden oturum açmak useriçin database. md5şifreli parola anlamına gelirken, passwordyetkilendirme sırasında düz metin parolaları da belirtebilirsiniz . Veritabanı sunucusuna yalnızca yerel olarak erişilebilir olduğu ve ağ erişimi olmadığı sürece bu 2 seçenek önemli olmamalıdır.

Önemli Not:pg_hba.conf Konulardaki tanım sırası - kurallar iptables gibi yukarıdan aşağıya okunur, bu nedenle muhtemelen kuralın üstüne önerilen kuralları eklemek istersiniz:

host    all             all             127.0.0.1/32            ident

re Önemli not: - sipariş önemlidir +1
hawkeye

23

@ Flaviodesousa'nın cevabı işe yararken, tüm kullanıcıların (diğer herkes) bir şifre girmesini zorunlu kılar.

Bazen herkes için akran kimlik doğrulaması yapmak mantıklıdır, ancak bir hizmet kullanıcısı için istisna oluşturur. Bu durumda pg_hba.conf dosyasına aşağıdaki gibi bir satır eklemek istersiniz:

local   all             some_batch_user                         md5

Bu satırı, yorumlanan başlık satırının hemen altına eklemenizi öneririz:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             some_batch_user                         md5

PostgreSQL'i yeniden başlatmanız gerekecek

sudo service postgresql restart

9.3 kullanıyorsanız pg_hba.conf dosyanız büyük olasılıkla:

/etc/postgresql/9.3/main/pg_hba.conf


12

Ben onunla karşılaştığımda benim için çalışıyor:

sudo -u username psql

yalnızca sistemde tamamen yeni bir kullanıcı oluşturursanız VE postgres'de çalışır - hsming sadece yeni oluşturulan postgres kullanıcısı ile postgres'e bağlanmak ister dev.
Kenneth

8

En kolay çözüm:

CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;

6

Sadece eklemek zorunda kaldım -h localhost


Benim sorunum bir ahududu postgres kullanmak oldu. ^^^ benim için çalıştı !! Teşekkür ederim!
tidydee

2

Benim durumumda farklı bir liman kullanıyordum. Varsayılan 5432. 5433 kullanıyordum. Bu benim için çalıştı:

$ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433

Birden fazla postgres yüklemeniz olduğunda bu otomatik olarak gerçekleşebilir.
Galigator

1

Gelecekte bunu gören insanlar postgresiçin /usr/lib/postgresql/10/bin, Ubuntu sunucumda.

Bunu .bashrc dosyamdaki PATH'e ekledim ve sonuna bu satırı ekledim

PATH=$PATH:/usr/lib/postgresql/10/bin

sonra komut satırında

$> source ./.bashrc

Bash ortamımı yeniledim. Artık postgres -D /whereverherhangi bir dizinden kullanabilirim


1

pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb


Bu hangi soruya cevap veriyor? Neden -U postgresönemli olabilir ? Zaten bütün bu çizgi harfler neler ?
greybeard

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.