在 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
我的印象是,两者的区别在于trust
我root
能做到
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 安装期间自动创建的。