103

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

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

psql: FATAL: Ident authentication failed for user "my-ubuntu-username"
4

6 回答 6

164

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

默认情况下 psql 连接到与用户同名的数据库。因此,有一个约定将其设为“用户的数据库”。如果您的用户只需要一个数据库,则没有理由打破该约定。我们将使用mydatabase示例数据库名称。

  1. 使用 createuser 和 createdb,我们可以明确数据库名称,

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

    您可能应该完全忽略这一点,而让所有命令默认为用户名。

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

    $ sudo -u postgres psql postgres
    

    然后在 psql shell

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

    然后就可以登录了,

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

    如果您不知道端口,您始终可以通过以postgres用户身份运行以下命令来获取它,

    SHOW port;
    

    或者,

    $ grep "port =" /etc/postgresql/*/main/postgresql.conf
    

旁注:postgres用户

我建议不要修改postgres用户。

  1. 它通常从操作系统锁定。任何人都不应该以postgres. 您应该有 root 才能以postgres.
  2. 它通常不受密码保护并委托给主机操作系统。这是一件好事。这通常意味着为了以postgresPostgreSQL 等效的 SQL Server身份登录SA,您必须具有对底层数据文件的写访问权限。而且,这意味着无论如何您通常都会造成严重破坏。
  3. 通过保持禁用此功能,您可以消除通过指定超级用户进行暴力攻击的风险。隐藏和掩盖超级用户的名字是有好处的。
于 2010-01-31T17:24:47.263 回答
52

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

sudo -u postgres psql postgres
于 2010-01-31T17:25:12.753 回答
31

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

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

psql -U postgres

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

psql -U postgres -d <dbname>
于 2010-01-31T17:40:01.303 回答
9

使用 postgres 用户或我们创建的任何其他用户登录的主要区别在于,当使用 postgres 用户时,不需要使用-h指定主机,而是指定另一个用户 if。

使用 postgres 用户登录

$ psql -U postgres 

使用其他用户创建和登录

# CREATE ROLE usertest LOGIN PASSWORD 'pwtest';
# CREATE DATABASE dbtest WITH OWNER = usertest;
# SHOW port;
# \q

$ psql -h localhost -d dbtest -U usertest -p 5432

总帐

来源

于 2019-10-19T17:03:42.253 回答
5

您还可以作为“普通”用户(不是 postgres)连接到数据库:

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"
于 2014-07-26T20:40:54.123 回答
3

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

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

于 2011-04-08T00:31:54.763 回答