2010-01-31 69 views
40

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

当我键入psql里,它只是告诉我

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

选中此[博客文章(http://www.depesz.com/index.php/2007/10/04/IDENT /)。 – 2010-01-31 18:41:18

回答

59

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

  1. 使用CREATEUSER和CREATEDB

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

    $ sudo -u postgres psql postgres 
    

    连接和,然后在PSQL外壳

    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的SA的PostgreSQL等效项,您必须具有对基础数据文件的写入访问权限。而且,这意味着无论如何你都可以正常破坏。
  3. 通过保持禁用状态,您可以通过指定的超级用户删除暴力攻击的风险。隐藏和遮蔽超级用户的名字具有优势。
+0

我知道如果使用数据库超级用户(-s)而不是非超级用户,则不会出现问题。对我来说,下一个问题是,即使DB用户不是超级用户,也可以做到这一点。 – Hartmut 2013-03-16 16:09:24

29

默认情况下,你将需要使用Postgres的用户:

sudo -u postgres psql postgres 
+0

谢谢。我在,但我没有登录作为Ubuntu用户(姓名),对不对? – user61734 2010-01-31 17:35:27

+0

@ user61734谢谢为我工作。 – sayth 2013-08-18 11:46:27

10

你所得到的错误是因为你,Ubuntu的用户名不是有效的Postgres用户。

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

psql -U postgres 

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

psql -U postgres -d <dbname> 
+0

我试过“psql -U postgres”,得到了同样的错误。 我还没有创建任何数据库,只是做了全新的安装。 – user61734 2010-01-31 17:43:12

+0

'psql -U myuser -d mydb'完美工作,而'psql -U myuser'尝试使用同行认证,谢谢! – inf3rno 2016-02-18 01:59:35

3

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

而且提防时下的identd可能要IPv6 enabled PostgreSQL的欢迎,其连接到本地主机的客户端。

1

还可以连接到数据库的 “普通” 用户(不是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"