帮忙看一个 postgresql 创建新用户后 使用新用户登录认证失败的问题?

image.png

在面的图片中主要 做了:

  1. 创建用户usera 并设置密码usera
  2. 创建usera的db useradb
  3. 将useradb 授权给usera
  4. 退出postgres用户,然后使用usera账号登录
  5. select pg_user看到usera 用户已经创建成功
D:\DevTools\postgresql\16\pgAdmin 4\runtime>psql -U usera -d useradb
psql: error: connection to server at "localhost" (::1), port 5432 failed: 致命错误:  用户 "usera" Password 认证失败

在pg的配置文件pg_hba.conf 配置了允许 所有用户对所有db的连接,更新配置后重启服务.
且用户usera的创建是在 配置更新重启之后.
image.png

问题

  1. 为什么会出现认证错误
  2. 正常情况下输入 psql -U usera -d useradb 命令 后应该要提示输入密码的, 咋密码没让输入就报错了?

补充问题

从下面的图片看出来, psql -U usera -d useradb 命令 应该是匹配到了 配置文件中的规则

阅读 897
avatarAI BotBETA

回答

1. 为什么会出现认证错误?

尽管你在 pg_hba.conf 文件中配置了允许所有用户对所有数据库的连接,但仍然出现认证错误的可能原因包括:

  • 密码不匹配:可能你在创建用户 usera 时设置的密码与尝试连接时输入的密码不一致。
  • pg_hba.conf 配置未正确应用:虽然你提到已经重启了服务,但确认一下 pg_hba.conf 文件的路径是否正确,以及配置是否被正确读取。有时配置文件路径或语法错误可能导致配置未生效。
  • PostgreSQL 服务未完全重启:在某些系统上,仅仅停止和启动服务可能不足以应用所有更改。尝试完全重启系统或确保服务已完全停止再重新启动。

2. 正常情况下输入 psql -U usera -d useradb 命令后应该要提示输入密码的,咋密码没让输入就报错了?

  • 密码认证失败:当 PostgreSQL 客户端(如 psql)尝试连接到服务器时,如果认证失败(如密码错误),它可能不会提示输入密码直接报错。这通常是因为客户端在尝试连接时,基于之前的失败尝试(或配置),可能已经决定不再提示密码。
  • 环境变量或配置问题:检查是否有环境变量(如 PGPASSWORD)设置了密码,或者 .pgpass 文件中有相关配置,这可能导致 psql 尝试使用这些预配置的密码进行连接。
  • 客户端缓存:有时 psql 客户端可能会缓存之前的认证信息。尝试使用 -h localhost(即使连接本地服务器)或 -W(强制提示密码)选项来运行 psql,例如:

    psql -h localhost -U usera -d useradb -W

这将强制 psql 提示输入密码,即使它可能已经缓存了之前的尝试。

建议的解决步骤

  1. 确认密码:确保你在创建用户时设置的密码与尝试连接时输入的密码完全一致。
  2. 检查 pg_hba.conf

    • 确认文件路径和语法正确。
    • 确保配置适用于你正在使用的连接类型(如 TCP/IP)。
  3. 完全重启 PostgreSQL 服务:确保服务已完全停止并重新启动。
  4. 使用 -W 选项:尝试使用 psql -h localhost -U usera -d useradb -W 命令来强制输入密码。
  5. 检查环境变量和 .pgpass 文件:确保没有预先配置密码。

如果上述步骤仍然无法解决问题,可能需要检查 PostgreSQL 的日志文件以获取更多关于认证失败的详细信息。

1 个回答

请不要使用截图代替纯文本内容。你应该使用纯文本配合 markdown 高亮描述你的问题

使用:

# show password_encryption;
 password_encryption 
---------------------
 scram-sha-256
(1 行记录)

确保你的 password 加密算法是 scram-sha-256 而不是 md5,否则你得把 pg_hba.conf 中的 METHOD 字段改为 md5 才会起作用。而 password_encryption 默认值从 14 以后的版本才改为 scram-sha-256,之前都是 md5,如果你的 postgresql 从老版本升级而来,或者拷贝了某些老版本的配置,那么可能这个值是md5而非默认的 scram-sha-256

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏