当我创建一个新用户,但它无法登录数据库时。
我这样做:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
然后创建一个数据库:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
之后,我尝试psql-U dev-W test_development
登录,但出现错误:
psql: FATAL: Peer authentication failed for user "dev"
我试图解决这个问题,但失败了。
对等身份验证意味着postgres向操作系统询问您的登录名,并将其用于身份验证。要使用postgres上的对等身份验证以用户“dev”身份登录,您还必须是操作系统上的用户“dev”。
您可以在Postgresql留档中找到身份验证方法的详细信息。
提示:如果身份验证方法不再有效,请断开服务器与网络的连接,并使用“本地主机”的“信任”方法(并在启用“信任”方法时,再次检查服务器是否无法通过网络访问)。
您的连接失败,因为默认情况下,psql
使用peer
身份验证通过UNIX套接字连接,这要求当前UNIX用户具有与psql
相同的用户名。因此,您必须创建UNIX用户dev
,然后以dev
身份登录,或者使用sudo-u dev psql test\u development
访问数据库(并且psql
不应要求密码)。
如果您不能或不想创建UNIX用户,比如只想连接到数据库进行特殊查询,那么使用psql--host=localhost--dbname=test\u development--username=dev
(正如@meyerson answer所指出的)强制套接字连接将解决您眼前的问题。
但是,如果要通过Unix套接字而不是对等方法强制进行密码身份验证,请尝试更改以下pg_hba.conf
*行:
从…起
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
到
# TYPE DATABASE USER ADDRESS METHOD
local all all md5
>
对等体
表示它将信任UNIX用户的身份(真实性)。所以不要问密码。
md5
意味着它将始终请求密码,并在使用MD5
进行散列后验证它。
当然,您还可以为特定的数据库或用户创建更具体的规则,其中一些用户具有peer
,而其他用户需要密码。
在更改pg_hba.conf
后,如果PostgreSQL正在运行,您需要通过重新加载(pg_ctlreload
)或重新启动(sudo service postgresql restart
)来重新读取配置。
*文件pg_hba.conf
很可能位于/etc/postgresql/9.x/main/pg_hba.conf
编辑:来自@Chloe、@JavierEH、@Jonas-Eicher、@fccoelho、@Joanis、@Uphill_的评论纳入了答案。
尝试:
psql -U user_name -h 127.0.0.1 -d db_name
在哪里
-U
是数据库用户名-h
是本地服务器的主机名/IP,从而避免Unix域套接字-d
是要连接的库名然后,Postgresql将其评估为“网络”连接,而不是Unix域套接字连接,因此不会像您在pg_hba.conf
中看到的那样评估为“本地”连接:
local all all peer
我第一次将应用程序部署到数字海洋,遇到了两个(可能更多)问题。 1) 在将添加到Gemfile后,我无法。我发现kgio与windows不兼容。我必须要Gemfile吗。当我通过capistrano部署时是否存在锁?我如何解决这个问题? 2)我在服务器上的postgreql上遇到身份验证问题。 我运行了这些命令(以及其他一些命令): 每次我限制部署时,我都会收到这个错误: 我尝试输入一个我知道不存
运行时,会收到以下错误消息: 致命:用户"rails_dev"的身份验证失败 无法为{"适配器"=创建数据库 PG::ConnectionBad:FATAL:Ident身份验证用户“rails_dev” /home/whitehat/.rvm/gems/ruby-2.4.0/gems/PG-0.21.0/lib/PG.rb:56:in'initialize' /home/whitehat/.rvm
身份验证设置看起来还可以,所以我不确定从这里要做什么。
我明白,如果添加-h localhost,它就可以工作了。 添加此标志是否会导致psql使用对等身份验证?
如何从管理员处访问postgres数据库? 我已更改用户的密码: 结果: 但我在管理员身上仍然会出现以下错误: 你知道为什么吗? 我有两个用户: 但是,当我使用以下命令创建用户时,我没有为其设置密码: 输出(为什么不要求密码??): 但我仍然得到管理员的错误: 编辑: 这是我的 我将更改为: 然后重启了我的机器。但还是没有运气。
我在尝试使用postgresql 11时遇到了rails 5.2.3的这个问题。 我一直在检查1号和2号 他们讨论pg_hba.conf以及如何将这些方法更改为md5或trust。在我的硬盘上,没有这样的文件。这些归档文件位于/var/lib/postgresql/11/: 如果我试图找到文件,它会出现在这里: 如果我进去,信任方法已经被使用了。 我已经卸载postgresql并再次安装它。 这是