获取错误:尝试获取pgsql与rails工作时,用户“postgres”的对等身份validation失败
我越来越
FATAL: Peer authentication failed for user "postgres"
当我试图使Rails的Postgres工作。
这是我的pg_hba.conf
,我的database.yml
和一个完整的跟踪转储 。
我在pg_hba中将身份validation更改为md5并尝试了不同的操作,但似乎没有任何效果。
我也尝试创build一个新的用户和数据库,按照Rails 3.2,致命:对用户validation失败(PG ::错误)
但他们不显示在pgadmin上,甚至当我运行sudo -u postgres psql -l
任何想法我要去哪里错了?
问题仍然是你的pg_hba.conf
文件(/etc/postgresql/9.1/main/pg_hba.conf)。 这一行:
local all postgres peer
应该
local all postgres md5
修改此文件后,不要忘记重新启动PostgreSQL服务器。 如果你在Linux上,这将是sudo service postgresql restart
。
这些是根据关于authentication方法的官方PostgreSQL文档的两个选项的简要说明。
同行authentication
对等身份validation方法的工作原理是从内核获取客户端的操作系统用户名,并将其用作允许的数据库用户名(可选用户名映射)。 此方法仅在本地连接上受支持。
密码authentication
基于密码的身份validation方法是md5和密码。 除了通过连接发送密码的方式,这些方法的操作类似,分别是MD5哈希和纯文本。
如果你关心密码“嗅探”攻击,那么md5是首选。 如果可能,应始终避免使用普通密码。 但是,md5不能与db_user_namespacefunction一起使用。 如果连接受到SSLencryption保护,则可以安全地使用密码(但如果使用SSL,SSL证书authentication可能是更好的select)。
安装Postgresql后,我做了下面的步骤。
- 打开Ubuntu的文件
pg_hba.conf
它将在/etc/postgresql/9.x/main
并更改这一行:
本地所有postgres同行
至
当地所有postgres信任
- 重新启动服务器
sudo service postgresql restart
- login到psql并设置你的密码
psql -U postgres
ALTER USER postgres with password 'your-pass';
- 最后更改
pg_hba.conf
当地所有postgres信任
至
本地所有postgres md5
重新启动postgresql服务器后,您可以使用自己的密码进行访问
authentication方法的详细信
信任 – 可以连接到服务器的任何人都有权访问数据库
同行使用客户端的操作系统用户名作为数据库用户名来访问它。
md5 – 基于密码的身份validation
在这里进一步的参考检查
如果通过本地主机(127.0.0.1)连接,则不应该遇到特定的问题。 我不会在pg_hba.conf中弄脏很多,但是我会调整你的连接string:
psql -U someuser -h 127.0.0.1 database
其中某个用户是您连接的用户,而数据库是您的用户有权连接到的数据库。
以下是我在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
请享用!
- 转到这个/etc/postgresql/9.x/main/并打开pg_hba.conf文件
在我的情况下:
$> sudo nano /etc/postgresql/9.3/main/pg_hba.conf
- 用md5replacepeer
所以这将被改为:
通过Unix域的数据库pipe理loginsocket local local postgres peer
# 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
这个:
通过Unix域的数据库pipe理loginsocket local local 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
-
然后重新启动pg服务器:
$> sudo服务postgresql重新启动
以下是用于连接postgres的方法列表:
# 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.
注意:如果你还没有创build你的postgres用户呢。 创build,现在你可以使用该用户凭据访问postgres服务器。
我有同样的问题。
从depa的解决scheme是绝对正确的。
只要确保你有一个用户configuration为使用PostgreSQL。
检查文件:
$ ls /etc/postgresql/9.1/main/pg_hba.conf -l
这个文件的权限应该给你注册psql的用户。
进一步。 如果你现在还不错
根据@ depa的指示更新。
即
$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
然后进行更改。
如果你有问题,你需要find你的pg_hba.conf
find / -name 'pg_hba.conf' 2>/dev/null
并改变像图像的configuration:
Postgresql 9.3
Postgresql 9.4
之后,你应该重新启动服务postgresql
postgresql 9.3的例子
service postgresql-9.3 restart
如果您有任何问题,则需要重新设置密码:
ALTER USER db_user with password 'db_password';
我正在克隆服务器上移动数据目录,并有麻烦login为postgres。 重置像这样的postgres密码为我工作。
root# su postgres postgres$ psql -U postgres psql (9.3.6) Type "help" for help. postgres=#\password Enter new password: Enter it again: postgres=#
使用host=localhost
连接。
PGconn *conn = PQconnectdb( "host=localhost user=postgres dbname=postgres password=123" );
上面的编辑工作对我来说,当我发现我需要重新启动postgres服务器后,他们。 对于Ubuntu的:
sudo /etc/init.d/postgresql restart
如果你想保持默认的configuration,但想要一个特定的用户/数据库连接套接字连接md5身份validation,添加一个“本地”行之前,“本地所有/所有”行:
# 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
下面的命令适用于我:
psql -d myDb -U username -W
你只需要设置METHOD来信任。
#TYPE DATABASE USER ADDRESS METHOD local all all trust
并重新加载postgres服务器。
# service postgresql-9.5 reload
pg_hba.conf中的变化不需要RESTART postgres服务器。 只是RELOAD。
将METHOD方法更改为信任 pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf |第85行)可解决此问题。 添加md5要求input密码,因此如果要求避免使用密码,请使用trust而不是md5 。
- Postgresql 9.2 pg_dump版本不匹配
- postgresql – replace文本字段中的所有string的实例
- Heroku Postgres错误:PGError:错误:关系“组织”不存在(ActiveRecord :: StatementInvalid)
- Heroku Postgres – 终止挂起查询(闲置交易)
- 为什么pg_restore成功返回,但实际上并没有恢复我的数据库?
- 你如何findPostgres / PostgreSQL表及其索引的磁盘大小
- 如何检查PostgreSQL服务器Mac OS X的状态
- PostgreSQL:默认约束名称
- 是否有可能做一个recursion的SQL查询?