2013-03-09 18 views
23

Mam użytkownikowi hasło pasujące do jednego określonego w database.ymlPG uwierzytelniania Peer udało

postgres=# select * from pg_user 
; 
    usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig 
------------+----------+-------------+----------+-----------+---------+----------+----------+----------- 
goodsounds | 16386 | t   | t  | t   | t  | ******** |   | 
postgres |  10 | t   | t  | t   | t  | ******** |   | 
(2 rows) 

Jest to błąd

[email protected] ~/rails_projects/goodsounds.org $ rake db:create 
FATAL: Peer authentication failed for user "goodsounds" 

Oto moja pg_hba.conf:

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

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          peer 
# IPv4 local connections: 
host all    all    127.0.0.1/32   trust 
# IPv6 local connections: 
host all    all    ::1/128     trust 
# Allow replication connections from localhost, by a user with the 
# replication privilege. 
#local replication  postgres        peer 
#host replication  postgres  127.0.0.1/32   trust 
#host replication  postgres  ::1/128     trust 

Poprzednio "zaufanie" powyżej było md5, ale zmieniłem, aby zobaczyć, czy to pomogłoby.

Oto moja database.yml:

# PostgreSQL. Versions 8.2 and up are supported. 
# 
# Install the pg driver: 
# gem install pg 
# On Mac OS X with macports: 
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config 
# On Windows: 
# gem install pg 
#  Choose the win32 build. 
#  Install PostgreSQL and put its /bin directory on your path. 
# 
# Configure Using Gemfile 
# gem 'pg' 
# 
development: 
    adapter: postgresql 
    encoding: unicode 
    database: goodsounds_development 
    pool: 5 
    username: goodsounds 
    password: test 

    # Connect on a TCP socket. Omitted by default since the client uses a 
    # domain socket that doesn't need configuration. Windows does not have 
    # domain sockets, so uncomment these lines. 
    host: localhost 
    port: 5432 

    # Schema search path. The server defaults to $user,public 
    #schema_search_path: myapp,sharedapp,public 

    # Minimum log levels, in increasing order: 
    # debug5, debug4, debug3, debug2, debug1, 
    # log, notice, warning, error, fatal, and panic 
    # The server defaults to notice. 
    #min_messages: warning 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: postgresql 
    encoding: unicode 
    database: goodsounds_test 
    pool: 5 
    username: goodsounds 
    password: test 

production: 
    adapter: postgresql 
    encoding: unicode 
    database: goodsounds_production 
    pool: 5 
    username: goodsounds 
    password: test 

Odpowiedz

82

„autoryzacja Peer” oznacza, że ​​jest za pomocą gniazda Unix i spodziewa łączący użytkownik Uniksa mieć taką samą nazwę użytkownika unix jako postgresql użytkownika.

Ponieważ lokalna nazwa UNIX jest funkdified i próbujesz połączyć się jako użytkownik goodsounds nad gniazda domeny Unix (local) połączenia, gdzie pg_hba.conf określa uwierzytelnianie peer, str poprawnie odrzuca próbę połączenia.

Jest to domyślne zachowanie dla wielu instalacji podczas korzystania z gniazd Uniksa.

Można:

  • Połącz przez TCP/IP, podając nazwę hosta w ustawieniach połączenia z bazą danych;
  • edytować pg_hba.conf używać do uwierzytelniania hasła md5 zamiast peer uwierzytelniania dla gniazd unixowych (local typ połączenia), więc Pg akceptuje uwierzytelnianie hasłem; lub
  • Połączyć się z nazwą użytkownika PostgreSQL taką samą jak nazwa użytkownika unix i utworzyć użytkownika w PostgreSQL, jeśli jeszcze nie istnieje.

Zobacz the docs for pg_hba.conf i resztę client authentication chapter of the documentation.

Należy zauważyć, że zmiany w pg_hba.conf nie odnoszą skutku natychmiast, należy ponownie uruchomić lub co najmniej ponownie załadować PostgreSQL, aby go ponownie odczytać pg_hba.conf.


Aha, jeśli masz wiele zainstalowanych wersji PostgreSQL, możesz mieć libpq z jednej wersji i serwer z drugiej. W takim przypadku upewnij się, że lokalizacja gniazda unix, do którego domyślnie jest używana libpq, jest taka sama, jak w przypadku serwera unix_socket_directories lub zastąp go (na przykład) host=/tmp w ciągu połączenia.

+2

Gdybym mógł dać ci więcej punktów, chciałbym. Dzięki Craig ... – Abram

+1

"Podając nazwę hosta w ustawieniach połączenia z bazą danych" oznacza "dodaj" host: localhost' do database.yml "? Ponieważ to nie zadziałało dla mnie. – Maarten

+1

@MaarrenSep yep. Jeśli to "nie działa", opublikuj nowe pytanie ze szczegółami (wersje, zawartość pg_hba.conf i database.yml, dokładne komunikaty o błędach itp.). Powiąż z tym linkiem treść i dodaj komentarz z linkiem do nowego pytania tutaj. –

7

Jeśli "uwierzytelnianie przez sieć równorzędną" nie działa, spróbuj użyć uwierzytelniania md5.

Aby określić try gospodarz coś takiego:

psql -d <dbname> -U <username> -h <hostname> 

lub to:

psql -d <dbname> -U <username> -h <hostname> -W 
+0

Pytanie nie ma nic wspólnego z 'psql', więc podanie opcji wiersza poleceń' psql' nie jest użyteczną odpowiedzią na to pytanie.To pytanie, dlaczego 'rake db: create' nie działa z pozornie rozsądnie skonfigurowaną aplikacją Rails. –

9

byłem w obliczu tego samego problemu na Ubuntu więc usunąłem ten błąd wykonując kilka kroków. Przełącz na postgres użytkownik

$ sudo su - postgres

będzie prosić o hasło i domyślne hasło to postgres

Po włączeniu użytkownikowi postgres, konsoli otwarte psql

$ psql 

więc sprawdzić wersję postgresów, jeśli dostępnych jest wiele wersji:

psql=# select VERSION(); 

PostgreSQL 9.1.13 on x86_64-unk....   # so version is 9.1 

Teraz Otwarte postgres user

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

9.1 jest górna komenda wersja forma powrotu

i zastąpić

local all    postgres        peer 

do

local all    postgres        md5 

sudo service postgresql restart

piszę kroki na moim blogu też

http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html

+0

Pytanie nie ma nic wspólnego z 'psql', więc podanie opcji wiersza poleceń' psql' nie jest użyteczną odpowiedzią na to pytanie. To pytanie, dlaczego 'rake db: create' nie działa z pozornie rozsądnie skonfigurowaną aplikacją Rails. –

1

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

# "local" is for Unix domain socket connections only 
    local all    all          peer 

zmieni się poniżej linii i działa dla mnie

# "local" is for Unix domain socket connections only 
local all    all          md5 
Powiązane problemy