You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中使用另一用户的密码设置目标用户密码?

解决PostgreSQL复制用户密码的问题

你遇到的问题核心是PostgreSQL的MD5密码哈希机制:它是由「明文密码 + 用户名」拼接后再做MD5哈希生成的。所以直接复制rolea的rolpassword给roleb后,系统验证roleb登录时,会计算md5(明文密码 + roleb),和存储的md5(明文密码 + rolea)不匹配,自然登录失败。

以下是几种可行的解决方法:

方法1:直接使用明文密码设置(推荐)

如果你知道rolea的明文密码,直接执行SQL语句给roleb设置相同的明文密码:

ALTER USER roleb PASSWORD 'rolea的明文密码';

PostgreSQL会自动根据明文密码 + roleb生成正确的MD5哈希,覆盖roleb的rolpassword,此时用该明文密码就能正常登录roleb。

方法2:生成目标用户的专属哈希(适用于未知明文密码的场景)

如果不知道明文密码,可借助pgcrypto扩展生成对应roleb的哈希值:

  1. 首先启用pgcrypto扩展(需要超级用户权限):
CREATE EXTENSION IF NOT EXISTS pgcrypto;
  1. 生成针对roleb的MD5哈希(需先获取明文密码,MD5不可逆,无法从rolea的哈希反推):
SELECT md5('明文密码' || 'roleb');
  1. 用生成的哈希值直接设置给roleb:
ALTER USER roleb PASSWORD 'md5xxxxxx...'; -- 替换为上一步生成的完整哈希值,需以md5开头

方法3:通过数据库导出修改(可选)

用pg_dump导出rolea的用户定义:

pg_dump -U postgres -d 你的数据库名 -s -c -t pg_authid | grep -A 5 "rolea"

修改导出语句中的用户名为roleb,并替换哈希值为对应roleb的MD5哈希(参考方法2生成),再执行修改后的ALTER USER语句。

内容的提问来源于stack exchange,提问作者Vaibhave S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:23:36