psql: FATAL: Peer authentication failed for user “dev”

后端 未结 12 818
盖世英雄少女心
盖世英雄少女心 2020-12-12 09:40

when i create a new user, but it cannot login the database.
I do that like this:

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superu         


        
相关标签:
12条回答
  • 2020-12-12 10:05

    In my case I was using different port. Default is 5432. I was using 5433. This worked for me:

    $ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433
    
    0 讨论(0)
  • 2020-12-12 10:07

    I simply had to add -h localhost

    0 讨论(0)
  • 2020-12-12 10:08

    Try:

    psql -U user_name  -h 127.0.0.1 -d db_name
    

    where

    • -U is the database user name
    • -h is the hostname/IP of the local server, thus avoiding Unix domain sockets
    • -d is the database name to connect to

    This is then evaluated as a "network" connection by Postgresql rather than a Unix domain socket connection, thus not evaluated as a "local" connect as you might see in pg_hba.conf:

    local   all             all                                     peer
    
    0 讨论(0)
  • 2020-12-12 10:08

    While @flaviodesousa's answer would work, it also makes it mandatory for all users (everyone else) to enter a password.

    Sometime it makes sense to keep peer authentication for everyone else, but make an exception for a service user. In that case you would want to add a line to the pg_hba.conf that looks like:

    local   all             some_batch_user                         md5
    

    I would recommend that you add this line right below the commented header line:

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    local   all             some_batch_user                         md5
    

    You will need to restart PostgreSQL using

    sudo service postgresql restart
    

    If you're using 9.3, your pg_hba.conf would most likely be:

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

    0 讨论(0)
  • 2020-12-12 10:09

    Peer authentication means that postgres asks the operating system for your login name and uses this for authentication. To login as user "dev" using peer authentication on postgres, you must also be the user "dev" on the operating system.

    You can find details to the authentication methods in the Postgresql documentation.

    Hint: If no authentication method works anymore, disconnect the server from the network and use method "trust" for "localhost" (and double check that your server is not reachable through the network while method "trust" is enabled).

    0 讨论(0)
  • 2020-12-12 10:10

    When you specify:

    psql -U user
    

    it connects via UNIX Socket, which by default uses peer authentication, unless specified in pg_hba.conf otherwise.

    You can specify:

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

    to get TCP/IP connection on loopback interface (both IPv4 and IPv6) for specified database and user.

    After changes you have to restart postgres or reload it's configuration. Restart that should work in modern RHEL/Debian based distros:

    service postgresql restart
    

    Reload should work in following way:

    pg_ctl reload
    

    but the command may differ depending of PATH configuration - you may have to specify absolute path, which may be different, depending on way the postgres was installed.

    Then you can use:

    psql -h localhost -U user -d database
    

    to login with that user to specified database over TCP/IP. md5 stands for encrypted password, while you can also specify password for plain text passwords during authorisation. These 2 options shouldn't be of a great matter as long as database server is only locally accessible, with no network access.

    Important note: Definition order in pg_hba.conf matters - rules are read from top to bottom, like iptables, so you probably want to add proposed rules above the rule:

    host    all             all             127.0.0.1/32            ident
    
    0 讨论(0)
提交回复
热议问题