文档章节

关于连接PostgreSQL时提示 FATAL: password authentication failed for user "连接用户名" 的解决办法

d
 dragon_tech
发布于 04/22 22:46
字数 1534
阅读 52
收藏 0

关于连接PostgreSQL时提示 FATAL: password authentication failed for user "连接用户名" 的解决方法
今天帮一个同学解决了一个FATAL: password authentication failed for user "连接用户名" 的错误问题,下面说说一下我遇过这个问题的以往排除方法

一、密码忘记了,输入不正确

[postgres @ pgsqldb-master bin]$ psql -h 127.0.0.1 -U postgres
Password for user postgres:
psql: FATAL: password authentication failed for user "postgres"

解决方法
1、编辑pg_hba.conf,将md5认证修改成trust认证,编辑后退出保存

[postgres @ pgsqldb-master bin]$ vi ../data/pg_hba.conf

2、执行pg_ctl reload加载生效
[postgres @ pgsqldb-master bin]$ export PGPORT=5432
[postgres @ pgsqldb-master bin]$ export PGDATE=postgres
[postgres @ pgsqldb-master bin]$ export PGDATA=/pgdata/avx/data
[postgres @ pgsqldb-master bin]$ export PGUSER=postgres
[postgres @ pgsqldb-master bin]$ export PATH=/pgdata/avx/bin:$PATH
[postgres @ pgsqldb-master bin]$ pg_ctl reload
server signaled

3、psql连接,用alter role修改密码
[postgres @ pgsqldb-master bin]$ psql
psql (9.2.3)
Type "help" for help.

postgres=# alter role postgres with password '123';
ALTER ROLE
postgres=#

4、退出psql
5、编辑pg_hba.conf,将turst认证修改成md5认证,编辑后退出保存
6、执行pg_ctl reload加载生效

二、密码过期了(今天解决在就是这个),下面来看一下实验

设置用户的密码有效期至2013-01-01

postgres=# alter role postbbs with password '123' valid until '2013-01-01';
ALTER ROLE
postgres=# \pset x on
Expanded display is on.
postgres=# SELECT * FROM pg_roles WHERE rolname='postbbs';
-[ RECORD 1 ]--+-----------------------
rolname | postbbs
rolsuper | f
rolinherit | t
rolcreaterole | f
rolcreatedb | f
rolcatupdate | f
rolcanlogin | t
rolreplication | f
rolconnlimit | -1
rolpassword | ********
rolvaliduntil | 2013-01-01 00:00:00+08
rolconfig |
oid | 16425

postgres=#

postgres=# \q
[postgres @ pgsqldb-master bin]$ psql -h 127.0.0.1 -U postbbs -d postgres
Password for user postbbs:输入密码123 虽然正确,但不能登录进去
psql: FATAL: password authentication failed for user "postbbs"
[postgres @ pgsqldb-master bin]$

我们现在再修改回来

[postgres @ pgsqldb-master bin]$ psql -h 127.0.0.1 -U postgres
Password for user postgres:
psql (9.2.3)
Type "help" for help.

postgres=# alter role postbbs with valid until 'infinity';
ALTER ROLE
postgres=# \pset x on
Expanded display is on.
postgres=# SELECT * FROM pg_roles WHERE rolname='postbbs';
-[ RECORD 1 ]--+---------
rolname | postbbs
rolsuper | f
rolinherit | t
rolcreaterole | f
rolcreatedb | f
rolcatupdate | f
rolcanlogin | t
rolreplication | f
rolconnlimit | -1
rolpassword | ********
rolvaliduntil | infinity
rolconfig |
oid | 16425

postgres=# \q
[postgres@pgsqldb-master bin]$ psql -h 127.0.0.1 -U postbbs -d postgres
Password for user postbbs:
psql (9.2.3)
Type "help" for help.

postgres=>
postgres=# SELECT rolvaliduntil FROM pg_roles WHERE rolname='postbbs';
rolvaliduntil
---------------
infinity
(1 row)

postgres=#


a、alter role postbbs with valid until 'infinity'; 密码永远有效
b、如果所有用户的密码全部过期,这里也需要将认证修改成trust再进入,再修改生效日期才行

另外我发现pgadmin角色管理有一个bug,当密码的有限期设置成空或者 infinity 时,在pgadmin角色管理里面会显示成 1970-1-1 ,如果这时我们用pgadmin角色管理窗口修改其它参数时,则rolvaliduntil 值会变成 1970-1-1,结果退出后就无法进行认证了,所以用pgadmin 角色管理窗口进行参数设置时一定要注意了,例如用窗口设置用户变成管理员,则语句会变成

105243255.jpg



ALTER ROLE postbbs
SUPERUSER
VALID UNTIL '1970-01-01 00:00:00';



三、采用密码文件认证,但里面的密码是错误的,则会出现如下的提示

[postgres @ pgsqldb-master bin]$ cat /home/postgres/.pgpass
127.0.0.1:5432:*:postgres:1234
[postgres @ pgsqldb-master bin]$ psql -h 127.0.0.1 -U postgres -d postgres
psql: FATAL: password authentication failed for user "postgres"
password retrieved from file "/home/postgres/.pgpass"

解决方法
1、修改.pgpass文件,将密码修改正确,注意,linux下.pgpass的访问权限要设置成 0600

2、如果用户无法修改密码文件,则连接时加-W,强制输入密码

[postgres@pgsqldb-master bin]$ psql -h 127.0.0.1 -U postgres -d postgres -W
Password for user postgres:
psql (9.2.3)
Type "help" for help.

postgres=#

四、低级错误,用户名不存在

[postgres @ pgsqldb-master bin]$ psql -h 127.0.0.1 -U posgres -d postgres -W
Password for user posgres:
psql: FATAL: password authentication failed for user "posgres"
[postgres@pgsqldb-master bin]$ psql -h 127.0.0.1 -U postGres -d postgres -W
Password for user postGres:
psql: FATAL: password authentication failed for user "postGres"

这样的大头虾错误不看清楚往往更难发现,注意用户名也是区分大小写的

五、修改了用户密码采用md5加密的用户名

[postgres@pgsqldb-master bin]$ psql -h 127.0.0.1 -U postgres -d postgres -W
Password for user postgres:
psql (9.2.3)
Type "help" for help.

postgres=# alter role postbbs with ENCRYPTED password '123';
ALTER ROLE
postgres=# alter role postgres with ENCRYPTED password '123';
ALTER ROLE
postgres=# SELECT rolname,rolpassword FROM pg_authid;
rolname | rolpassword
----------+-------------------------------------
postbbs | md5514d208ad0f8842c176b4836992f1cbb
postgres | md59df270eb52907fff723d9b8b7436113a
(2 rows)

密码一样都是 "123" 不同用户名,生成的md5编码也是不样的

postgres=# alter role postbbs rename to postbbs_1;
NOTICE: MD5 password cleared because of role rename
ALTER ROLE
postgres=# SELECT rolname,rolpassword FROM pg_authid;
rolname | rolpassword
-----------+-------------------------------------
postgres | md59df270eb52907fff723d9b8b7436113a
postbbs_1 |
(2 rows)

因为MD5加密的口令使用角色名字作为加密的盐粒,所以, 如果口令是MD5加密的,那么给一个用户改名会清空其口令

更详细的说明 http://www.postgresql.org/docs/9.2/static/sql-alterrole.html

postgres=# \c postgres postbbs_1
Password for user postbbs_1:
FATAL: password authentication failed for user "postbbs_1"
Previous connection kept

由于密码清空,所以也就无法认证

postgres=# alter role postbbs_1 with UNENCRYPTED password '123';
ALTER ROLE
postgres=# SELECT rolname,rolpassword FROM pg_authid;
rolname | rolpassword
-----------+-------------------------------------
postgres | md59df270eb52907fff723d9b8b7436113a
postbbs_1 | 123
(2 rows)

postgres=# alter role postbbs_1 rename to postbbs;
ALTER ROLE
postgres=# SELECT rolname,rolpassword FROM pg_authid;
rolname | rolpassword
----------+-------------------------------------
postgres | md59df270eb52907fff723d9b8b7436113a
postbbs | 123
(2 rows)

postgres=# \c postgres postbbs
Password for user postbbs:
You are now connected to database "postgres" as user "postbbs".
postgres=>

采用明码密码存储的话,修改前后密码保持不变,所以可以认证

所以修改MD5加密认证用户名时应采用这样的做法,这一点本人认为有些不友好,因为原来md5密码我们是不知道明文的

postgres=> \c postgres postgres
Password for user postgres:
You are now connected to database "postgres" as user "postgres".
postgres=# alter role postbbs rename to postbbs_1;
ALTER ROLE
postgres=# alter role postbbs_1 with password '123';
ALTER ROLE
postgres=#

六、一台主机上将了多个不同port的Postgresql服务,连接时指向的port不正确

[postgres @ pgsqldb-master bin]$ psql -h 192.168.1.100 -U postgres -d postgres
Password for user postgres:
psql: FATAL: password authentication failed for user "postgres"

默认的5432 port里面的用户postgres密码不是123

[postgres@pgsqldb-master bin]$ psql -h 192.168.1.100 -U postgres -d postgres -p 9240
Password for user postgres:
psql (9.2.3, server 9.2.4)
Type "help" for help.

postgres=#

port 为9240的用户postgres 密码才是123

这样的错误也是属于比较大头虾的错误

本文转载自:https://blog.51cto.com/85042188/1359393

d
粉丝 5
博文 472
码字总数 14516
作品 0
西安
私信 提问
关于连接PostgreSQL时提示 FATAL: password authentication failed for user "连接用户名" 的解决办法【自己试验通过】

借鉴 https://my.oschina.net/u/3371661/blog/3040763 一直以为是密码设错了,其它应该是权限问题【个人理解】 alter role postgres with password '123'; 解决方法 1、编辑pg_hba.conf,将m......

dragon_tech
04/23
19
0
试用PostgreSQL+psycopg2+SQLAlchemy

1.PostgreSQL 因为想添加个gis功能模块,看django推荐gis用PostgreSQL数据库,拿来试用下,安装的时候有几个注意的小问题。 1.To use the yum repository, you must first install the repo...

quanpower
2014/02/27
2.8K
0
intall postgresql 9.1 on CentOS

http://people.planetpostgresql.org/devrim/index.php?/archives/48-What-is-new-in-PostgreSQL-9.0-RPMs.html # rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-releas......

mark35
2012/03/01
394
0
Postgresql 客户端连接问题

做程序调用postgresql数据库的时候,后台出现这么一条错误: java.sql.SQLException: No pg_hba.conf entry for host 210.230.203.160, user postgres, database rinri01 这条错误是什么意思...

dodojava
2011/11/25
77
0
请问,这种方法为什么不能同步

Windows下Postgresql数据库通过Slony-I 实现数据库同步备份 一. 我们要实现的环境是windows xp、windows7、windows2003或windows2008上安装Postgresql数据库,实现目的是多台数据库服务器进...

laladasdas
2012/11/26
390
2

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部