全新安装后,如何登录和验证到Postgresql?


78

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

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

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

检查此博客文章

Answers:


123

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

默认情况下,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. 它通常不受密码保护,并委托给主机操作系统。这是一件好事。这通常意味着,要以postgres与SQL Server等效的PostgreSQL登录SA,您必须具有对基础数据文件的写访问权。而且,这意味着您通常无论如何都可以破坏。
  3. 通过禁用此功能,可以消除通过指定的超级用户进行暴力攻击的风险。隐藏和隐藏超级用户的名称具有优势。

我了解,如果使用数据库超级用户(-s)而不是非超级用户,则不会发生此问题。对我来说,下一个问题是,即使数据库用户不是超级用户,也可以做些什么来使其运行。
Hartmut P.

在我的情况下,使用以下命令创建用户后:$ sudo -u postgres createuser -s $ USER,我需要使用以下命令配置密码:ALTER USER myuser WITH PASSWORD'mypass'; (使用以下命令登录postgres:sudo -u postgres psql)
negrotico19 '18

我应该如何理解命令sudo -u postgres psql postgres?我知道这sudo意味着root特权,-u postgres意味着以用户身份登录postgrespsql是要连接的命令postgresql,但是最后postgres做什么?
yuqli

42

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

sudo -u postgres psql postgres

1
或者,如果您不能使用sudo,请执行以下操作:“ su postgres”,然后“ psql”
Daniel Katz

22

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

您需要告诉psql使用哪个数据库用户名

psql -U postgres

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

psql -U postgres -d <dbname>

1
我尝试了“ psql -U postgres”,得到了同样的错误。我尚未创建任何数据库,只是进行了全新安装。
user61734'1

psql -U myuser -d mydb工作完美,同时psql -U myuser尝试使用对等身份验证,谢谢!
inf3rno

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"

3

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

还要注意,当今,identd必须启用IPv6才能支持Postgresql,以欢迎连接到localhost的客户端。


3

使用postgres用户或我们创建的任何其他用户登录之间的主要区别在于,使用postgres用户时,无需使用-h指定主机,而如果使用,则可以指定其他用户。

用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

GL

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.