富群兴 网络设计工作室
企业智慧ERP应用软件服务商

postgres密码修改不了

 二维码 661
发表时间:2019-05-26 17:30

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

  新安装的postgresql,密码不知道,输入不正确

  [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

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

  本文转自:http://www.myexception.cn/operating-system/1348177.html

在线留言

在线留言

了解更多软件开发、行业ERP、企业官网应用服务

公司
*
手机
*
描述
*
验证码
 换一张
*
提交留言
联系QQ:2590552134
手机号码:13682478927
联系邮箱:2590552134@qq.com
联系地址:广东省深圳市龙岗区横岗镇新光一街35号
热搜词:ERP软件开发,进销存管理软件免费下载,企业管理软件,企业ERP管理系统
粤公网安备 44030702000841号
我们的使命是助力商家全渠道管理与业务拓展,同时在供应链重塑的背景下,实现商业模式的全新升级
——————
热线电话
136 8247 8927
website qrcode