postgreSQL 的“信任”和“身份”的区别?

San*_*dra 4 postgresql linux ubuntu centos

在 postgreSQL 中/var/lib/pgsql/data/pg_hba.conf trustident可以method像这样设置。

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         postgres                          trust
host    all         postgres    127.0.0.1/32          trust
Run Code Online (Sandbox Code Playgroud)

我的印象是,两者的区别在于trustroot可以做到

psql postgres
Run Code Online (Sandbox Code Playgroud)

并与ident我只好

sudo -u postgres psql postgres
Run Code Online (Sandbox Code Playgroud)

但是,即使使用trust.

一个人能解释的区别是什么trustident

Dan*_*ité 6

psql必须使用数据库的用户名连接到数据库。当它没有用-U选项指定时,它采用操作系统用户名作为默认值。

所以实际上,psql dbname等价于psql -U $USER dbname

因此,当您登录为root并且尚未创建名为 的数据库用户时root,这通常会产生以下错误,即使身份验证模式为trust.

# psql postgres
psql: FATAL: 角色“root”不存在

另一方面,如果它像这样被调用,它仍然可以作为 root 登录:

# psql -U postgres postgres

这是可以的,因为名为 name 的数据库postgres和名为user的数据库postgres都存在,因为它们是在 PostgreSQL 安装期间自动创建的。


Jen*_*y D 5

“信任”的意思是“无论客户端使用什么用户名,您都不需要要求密码来验证用户”。

“Ident”的意思是“接受 identd 返回的任何用户名,而不需要密码来验证”。

postgresql 站点上有关于不同身份验证方法的更多信息。

为了找出这个特定连接失败的原因,您需要检查 postgresql 日志。可能是您使用的用户名在 postgres 数据库中不存在,或者可能是其他一些问题 - 不先查看日志就无法判断。

  • `ident` 非常糟糕,因为它需要运行一个 `identd`,并且 `identd` 可以回答客户端计算机想要的任何内容。这真的是一个应该避免的可怕遗产。不过,用于“本地”连接的“peer”仍然非常有用。 (3认同)