San*_*dra 4 postgresql linux ubuntu centos
在 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
Run Code Online (Sandbox Code Playgroud)
我的印象是,两者的区别在于trust我root可以做到
psql postgres
Run Code Online (Sandbox Code Playgroud)
并与ident我只好
sudo -u postgres psql postgres
Run Code Online (Sandbox Code Playgroud)
但是,即使使用trust.
题
一个人能解释的区别是什么trust和ident?
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 安装期间自动创建的。
“信任”的意思是“无论客户端使用什么用户名,您都不需要要求密码来验证用户”。
“Ident”的意思是“接受 identd 返回的任何用户名,而不需要密码来验证”。
postgresql 站点上有关于不同身份验证方法的更多信息。
为了找出这个特定连接失败的原因,您需要检查 postgresql 日志。可能是您使用的用户名在 postgres 数据库中不存在,或者可能是其他一些问题 - 不先查看日志就无法判断。