ord*_*of1 679 postgresql ruby-on-rails
我收到错误:
FATAL: Peer authentication failed for user "postgres"
Run Code Online (Sandbox Code Playgroud)
当我尝试使用Rails进行postgres时.
这是我的pg_hba.conf
,我的database.yml
,以及完整痕迹的转储.
我在pg_hba中将身份验证更改为md5并尝试了不同的操作,但似乎都没有.
我还尝试按照Rails 3.2创建一个新的用户和数据库,致命:用户的对等身份验证失败(PG ::错误)
但他们没有出现在pgadmin上,甚至在我跑步时也没有出现sudo -u postgres psql -l
.
知道我哪里错了吗?
dep*_*epa 944
问题仍然是你的pg_hba.conf
文件(/etc/postgresql/9.1/main/pg_hba.conf*).这一行:
local all postgres peer
Run Code Online (Sandbox Code Playgroud)
应该
local all postgres md5
Run Code Online (Sandbox Code Playgroud)
*如果找不到此文件,运行/etc/postgresql/9.1/main/pg_hba.conf*
时应显示文件的位置.
更改此文件后,请不要忘记重新启动PostgreSQL服务器.如果你在Linux上,那就是locate pg_hba.conf
.
这些是根据官方PostgreSQL文档关于身份验证方法的两个选项的简要描述.
对等身份验证方法的工作原理是从内核获取客户端的操作系统用户名,并将其用作允许的数据库用户名(使用可选的用户名映射).仅在本地连接上支持此方法.
基于密码的身份验证方法是md5和密码.除了通过连接发送密码的方式外,这些方法的操作类似,分别是MD5散列和明文.
如果你完全担心密码"嗅探"攻击,那么首选md5.如果可能,应始终避免使用普通密码.但是,md5不能与db_user_namespace功能一起使用.如果连接受SSL加密保护,则可以安全地使用密码(但如果依赖于使用SSL,则SSL证书身份验证可能是更好的选择).
样本位置 sudo service postgresql restart
/etc/postgresql/9.1/main/pg_hba.conf
Ari*_*n L 326
安装Postgresql后,我做了以下步骤.
pg_hba.conf
Ubuntu 文件,它将进入/etc/postgresql/9.x/main
并更改此行:local all postgres peer
至
local all postgres trust
Run Code Online (Sandbox Code Playgroud)$ sudo service postgresql restart
psql -U postgres
$ psql -U postgres
db> ALTER USER postgres with password 'your-pass';
Run Code Online (Sandbox Code Playgroud)
pg_hba.conf
从local all postgres trust
至
local all postgres md5
重新启动postgresql服务器后,您可以使用自己的密码访问它
验证方法细节:
信任 - 任何可以连接到服务器的人都有权访问数据库
peer - 使用客户端的操作系统用户名作为数据库用户名来访问它.
md5 - 基于密码的身份验证
有关进一步参考,请点击此
Sty*_*ter 186
如果您通过localhost(127.0.0.1)连接,则不应遇到该特定问题.我不会吝啬pg_hba.conf但我会调整你的连接字符串:
psql -U someuser -h 127.0.0.1 database
Run Code Online (Sandbox Code Playgroud)
其中某个用户是您正在连接的用户,而数据库是您的用户有权连接的数据库.
这是我在Debian上设置postgres的方法:
http://www.postgresql.org/download/linux/debian/ (Wheezy 7.x)
as root …
root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list
root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
root@www0:~# apt-get update
root@www0:~# apt-get install postgresql-9.4
root@www0:~# su - postgres
postgres@www0:~$ createuser --interactive -P someuser
Enter password for new role:
Enter it again:
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) n
postgres@www0:~$ createdb -O someuser database
postgres@www0:~$ psql -U someuser -h 127.0.0.1 database
Run Code Online (Sandbox Code Playgroud)
请享用!
小智 36
这对我有用!!
sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)
Rok*_*kas 17
最简单的解决方案,无需更改配置。(ubuntu) 更改用户,然后连接到数据库 cli。
sudo -i -u postgres
psql
Run Code Online (Sandbox Code Playgroud)
取自https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
Pra*_*jan 17
当您不提供主机时,可能会出现此错误。下面的场景与此类似。
user@homepc:~$ psql -d test_db -U test_user
psql: 错误: 致命: 用户“test_user”的对等身份验证失败
user@homepc:~$ psql -h localhost -d test_db -U test_user
用户 test_user 的密码:
提供主机解决了我在 psql 命令行中的问题。尝试在 Rails 中为 postgress 提供连接配置中的主机。
d.d*_*lov 16
如果您遇到问题,则需要找到您的问题pg_hba.conf
.命令是:
find / -name 'pg_hba.conf' 2>/dev/null
然后更改配置文件:
Postgresql 9.3
Postgresql 9.4
下一步是:重新启动数据库实例:
service postgresql-9.3 restart
如果您有任何问题,则需要再次设置密码:
ALTER USER db_user with password 'db_password';
Tai*_*aiz 15
就我而言:
$> sudo nano /etc/postgresql/9.3/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)
所以这将改为:
数据库管理登录由Unix域套接字本地所有postgres对等
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Run Code Online (Sandbox Code Playgroud)
这个:
数据库管理登录由Unix域套接字本地所有postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
Run Code Online (Sandbox Code Playgroud)
然后重启pg服务器:
$> sudo service postgresql restart
以下是用于连接postgres的METHODS列表:
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.
Run Code Online (Sandbox Code Playgroud)
注意:如果您尚未创建postgres用户.创建它,现在您可以使用该用户凭据访问postgres服务器.
提示:如果在postgres重新启动后它不起作用,则关闭终端并再次打开.
Gih*_*age 11
sudo psql --host=localhost --dbname=database-name --username=postgres
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题
nir*_*ack 10
我有同样的问题.
来自depa的解决方案绝对正确.
只需确保您已将用户配置为使用PostgreSQL.
检查文件:
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
Run Code Online (Sandbox Code Playgroud)
应该将此文件的权限授予您已注册psql的用户.
进一步.如果你现在好,..
根据@depa的说明更新.
即
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)
然后进行更改.
如果要保留默认配置但希望对一个特定用户/数据库连接使用套接字连接进行md5身份验证,请在"本地所有/所有"行之前添加"本地"行:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local username dbname md5 # <-- this line
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Run Code Online (Sandbox Code Playgroud)
小智 6
在我发现我需要在制作后重新启动postgres服务器之后,上面的编辑对我有用.对于ubuntu:
sudo /etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)
小智 6
用于host=localhost
连接.
PGconn *conn = PQconnectdb(
"host=localhost user=postgres dbname=postgres password=123"
);
Run Code Online (Sandbox Code Playgroud)
在pg_hba.conf中更改METHOD peer以信任(/etc/postgresql/9.1/main/pg_hba.conf |第85行)解决了这个问题.添加md5要求输入密码,因此如果需要避免使用密码,请使用trust而不是md5.
小智 5
下面的命令对我有用:
psql -d myDb -U username -W
Run Code Online (Sandbox Code Playgroud)
小智 5
您只需将 METHOD 设置为信任。
#TYPE DATABASE USER ADDRESS METHOD
local all all trust
Run Code Online (Sandbox Code Playgroud)
并重新加载 postgres 服务器。
# service postgresql-9.5 reload
Run Code Online (Sandbox Code Playgroud)
pg_hba.conf 中的更改不需要重新启动 postgres 服务器。只需重新加载。
pg_config 用于提供编译信息,以帮助扩展和客户端程序针对 PostgreSQL 进行编译和链接。它对机器上的活动 PostgreSQL 实例一无所知,只知道二进制文件。
pg_hba.conf 可以出现在许多其他位置,具体取决于 Pg 的安装方式。标准位置是数据库的 data_directory 中的 pg_hba.conf (可能位于 /home、/var/lib/pgsql、/var/lib/postgresql/[version]/、/opt/postgres/ 等)但用户和包装商可以将其放在任何他们喜欢的地方。很遗憾。
查找 pg_hba.conf 的唯一有效方法是询问正在运行的 PostgreSQL 实例 pg_hba.conf 在哪里,或者询问系统管理员它在哪里。您甚至不能依赖于询问 datadir 在哪里并解析 postgresql.conf,因为启动 Pg 时 init 脚本可能会传递类似 -c hba_file=/some/other/path 的参数。
你想要做的是询问 PostgreSQL:
SHOW hba_file;
Run Code Online (Sandbox Code Playgroud)
此命令必须在超级用户会话上运行,因此对于 shell 脚本,您可以编写如下内容:
psql -t -P format=unaligned -c 'show hba_file';
Run Code Online (Sandbox Code Playgroud)
并设置环境变量PGUSER、PGDATABASE等,确保连接正确。
是的,这有点像先有鸡还是先有蛋的问题,因为如果用户无法连接(例如,在编辑 pg_hba.conf 搞砸之后),您将无法找到 pg_hba.conf 来修复它。
另一个选择是查看 ps 命令的输出并查看 postmaster 数据目录参数 -D 是否可见,例如
ps aux | grep 'postgres *-D'
Run Code Online (Sandbox Code Playgroud)
因为 pg_hba.conf 将位于数据目录中(除非您使用 Debian/Ubuntu 或某些衍生版本并使用它们的软件包)。
如果您专门针对从 Debian/Ubuntu 软件包安装了 PostgreSQL 的 Ubuntu 系统,那么事情会变得更容易一些。你不必处理从源代码手工编译的 Pg,有人在他们的主目录中 initdb'd 了一个数据目录,或者在 /opt 中安装 EnterpriseDB Pg 等。你可以询问 pg_wrapper,Debian/Ubuntu 多版本-version Pg 管理器,其中 PostgreSQL 使用 pg_wrapper 中的 pg_lsclusters 命令。
如果无法连接(Pg 未运行,或者需要编辑 pg_hba.conf 才能连接),则必须在系统中搜索 pg_hba.conf 文件。在 Mac 和 Linux 上,类似 sudo find / -type f -name pg_hba.conf 就可以了。然后检查同一目录中的 PG_VERSION 文件,以确保它是正确的 PostgreSQL 版本(如果有多个版本)。(如果 pg_hba.conf 位于 /etc/ 中,请忽略它,它是父目录名称)。如果同一 PostgreSQL 版本有多个数据目录,则必须查看数据库大小,从 ps 检查正在运行的 postgres 的命令行,看看它的数据目录 -D 参数是否与您正在编辑的位置匹配,等等. https://askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
请按照以下步骤
1)。首先,导航到 /etc/postgresql/{your pg version}/main 目录。
我的版本是 10 然后:
cd /etc/postgresql/10/main
Run Code Online (Sandbox Code Playgroud)
2)。这里驻留的 pg_hba.conf 文件需要在这里做一些更改,您可能需要 sudo 访问权限。
sudo nano pg_hba.conf
Run Code Online (Sandbox Code Playgroud)
3)。向下滚动文件,直到找到这个 –
# Database administrative login by Unix domain socket
local all postgres peer
Run Code Online (Sandbox Code Playgroud)
4)。这里把peer改成md5如下。
# Database administrative login by Unix domain socket
local all all md5
Run Code Online (Sandbox Code Playgroud)
peer 意味着它将信任 UNIX 用户的真实性,因此不会
提示输入密码。md5 意味着它总是要求输入密码,并在用 MD5 散列后验证它。
5).现在保存文件并重新启动Postgres服务器。
sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)
现在应该没问题了。
大多数解决方案都建议编辑pg_hba.conf
.
对于不想编辑配置文件的你,基本上只需要登录postgres
用户即可。如果您正在使用/在 Linux 服务器中,请使用此命令
sudo -i -u postgres
Run Code Online (Sandbox Code Playgroud)
它将创建用户postgres
,然后登录。现在再次尝试您的 psql 命令。
您还可以postgres
使用以下命令为用户添加密码:(您应该是 root 用户)
passwd postgres
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为根据这个PostgreSQL 的文档,
对等认证
对等身份验证方法的工作原理是从内核获取客户端的操作系统用户名并将其用作允许的数据库用户名(具有可选的用户名映射)。此方法仅在本地连接上受支持。
归档时间: |
|
查看次数: |
574572 次 |
最近记录: |