关于身份验证:如何在全新安装后登录并验证Postgresql?

How do I login and authenticate to Postgresql after a fresh install?

在薄荷ubuntu上新安装了postgres 8.4。 如何使用psql为postgres创建用户并登录?

当我输入psql时,它只是告诉我

1
psql: FATAL: Ident authentication failed FOR USER"my-ubuntu-username"


您可以使用两种方法。两者都需要创建用户和数据库。

默认情况下,psql使用与用户相同的名称连接到数据库。因此,有一个惯例,使"用户的数据库"。如果您的用户只需要一个数据库,则没有理由违反该约定。我们将使用mydatabase作为示例数据库名称。

  • 使用createuser和createdb,我们可以明确地说明数据库名称,

    1
    2
    3
    $ sudo -u postgres createuser -s $USER
    $ createdb mydatabase
    $ psql -d mydatabase

    您应该完全省略它,并将所有命令默认为用户名。

    1
    2
    3
    $ sudo -u postgres createuser -s $USER
    $ createdb
    $ psql
  • 使用SQL管理命令,并通过TCP连接密码

    1
    $ sudo -u postgres psql postgres

    然后,在psql shell中

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

    然后你可以登录,

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

    如果你不知道端口,你总是可以通过运行以下命令来获得它,作为postgres用户,

    1
    SHOW port;

    要么,

    1
    $ grep"port =" /etc/postgresql/*/main/postgresql.conf
  • 旁注:postgres用户

    我建议不要修改postgres用户。

  • 它通常是从操作系统锁定的。没有人应该以postgres"登录"操作系统。你应该有root用户来验证postgres
  • 它通常不受密码保护,并委托给主机操作系统。这是一件好事。这通常意味着为了以postgres登录,这是SQL Server的SA的PostgreSQL等价物,您必须具有对底层数据文件的写访问权。而且,这意味着无论如何你通常都会破坏混乱。
  • 通过禁用此功能,您可以消除通过指定超级用户进行暴力攻击的风险。隐藏和模糊超级用户的名称具有优势。

  • 默认情况下,您需要使用postgres用户:

    1
    sudo -u postgres psql postgres


    您得到的错误是因为您的-ubuntu-username不是有效的Postgres用户。

    你需要告诉psql使用什么数据库用户名

    1
    psql -U postgres

    您可能还需要指定要连接的数据库

    1
    psql -U postgres -d <dbname>


    你也可以作为"普通"用户(而不是postgres)连接到数据库:

    1
    2
    3
    4
    5
    postgres=# \CONNECT opensim Opensim_Tester localhost;

    Password FOR USER Opensim_Tester:    

    You are now connected TO DATABASE"opensim" AS USER"Opensim_Tester" ON host"localhost" at port"5432"

    如果数据库客户端使用TCP / IP连接,并且在pg_hba.conf中配置了ident auth,请检查是否已安装并运行identd。即使您只有本地客户端连接到"localhost",这也是必需的。

    还要注意,现在identd可能必须启用IPv6才能使Postgresql欢迎连接到localhost的客户端。