postgreSQL 的“trust”和“ident”有什么区别?

postgreSQL 的“trust”和“ident”有什么区别?

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

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         postgres                          trust
host    all         postgres    127.0.0.1/32          trust

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

psql postgres

ident必须

sudo -u postgres psql postgres

但是,即使使用 ,我也无法使第一个命令起作用trust

问题

trust有人能解释一下和有什么区别吗ident

答案1

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

“Ident” 的意思是“接受 identd 返回的任何内容作为用户名,而不要求输入密码进行验证”。

有关不同身份验证方法的更多信息,请访问postgresql 网站

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

答案2

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

所以实际上psql dbname相当于psql -U $USER dbname

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

# psql postgres
psql:严重错误:角色“root”不存在

另一方面,如果像这样调用它,它就会起作用,并且仍然以 root 身份登录:

# psql -U postgres postgres

这是没问题的,因为名为的数据库postgres和名为的用户postgres都存在,因为它们是在 PostgreSQL 安装期间自动创建的。

相关内容