33

PostgreSQLを使用していて、database.ymlで指定されたものと一致するパスワードを持つユーザーがいます

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)

しかし、コマンドを実行してデータベースを作成しようとすると

rails db:create

エラーが発生します

致命的:ユーザー「goodsounds」のピア認証に失敗しました

これが私の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

以前は上記の「信頼」はmd5でしたが、それが役立つかどうかを確認するために変更しました。

これが私の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
4

5 に答える 5

97

「ピア認証」とは、UNIX ソケットを使用し、接続している UNIX ユーザーが postgresql ユーザー名と同じ UNIX ユーザー名を持つことを期待していることを意味します。

ローカル UNIX ユーザー名がであり、認証を指定する UNIX ドメイン ソケット ( ) 接続を介しfunkdifiedてユーザーとして接続しようとしているため、Pg は接続試行を正しく拒否します。goodsoundslocalpg_hba.confpeer

これは、UNIX ソケットを使用する場合の多くのインストールのデフォルトの動作です。

あなたはできる:

  • データベース接続設定でホスト名を指定して、TCP/IP 経由で接続します。
  • UNIXソケット(接続タイプ)の認証の代わりにパスワード認証pg_hba.confを使用するように編集して、Pgがパスワード認証を受け入れるようにします。またmd5peerlocal
  • Unix ユーザー名と同じ PostgreSQL ユーザー名で接続し、まだ存在しない場合は PostgreSQL にユーザーを作成します。

のドキュメントと、ドキュメントのpg_hba.confクライアント認証の章の残りの部分を参照してください。

pg_hba.confへの変更はすぐには反映されないことに注意してください。再読み込みするには、PostgreSQL を再起動するか、少なくとも再読み込みする必要がありますpg_hba.conf


また、複数の PostgreSQL バージョンがインストールされている場合、あるバージョンの libpq と別のバージョンのサーバーが存在する可能性があります。この場合、libpq がデフォルトで接続する UNIX ソケットの場所がサーバーの場所と同じであることを確認するか、接続文字列unix_socket_directoriesで (eg) host=/tmpで上​​書きします。

于 2013-03-09T07:48:36.790 に答える
11

「ピア認証」が機能しない場合は、md5 認証を試してください。

ホストを指定するには、次のようにしてください。

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

またはこれ:

 psql -d <dbname> -U <username> -h <hostname> -W
于 2014-04-17T19:56:32.597 に答える