同服务器运行Aiogram Telegram bot连接PostgreSQL报asyncpg授权错误如何解决?
PostgreSQL连接权限配置解决方案
错误原因
你当前仅在pg_hba.conf中配置了本地PC的IP白名单,当Bot运行在服务器本地时,若数据库连接字符串填写的是服务器公网IP,PostgreSQL会识别到连接来源为服务器自身的公网IP,不在已配置的白名单规则内,因此触发报错。
配置步骤
方案一:本地回路连接(更推荐,性能更高更安全)
Bot和PostgreSQL部署在同一台服务器,优先走本地回路无需走公网,操作如下:
- 修改Gino的数据库连接配置,将原来填写的服务器公网IP替换为
127.0.0.1或localhost - 编辑
pg_hba.conf文件,添加本地回路白名单规则:
若你的PostgreSQL版本较旧,使用MD5认证,将# IPv4本地规则 host all all 127.0.0.1/32 scram-sha-256 # 若系统默认解析localhost为IPv6地址,补充如下规则 host all all ::1/128 scram-sha-256scram-sha-256替换为md5即可。
方案二:保留公网IP连接
若你需要继续使用服务器公网IP作为数据库连接地址,直接在pg_hba.conf中添加服务器自身公网IP的白名单即可:
host all all 你的服务器公网IP/32 scram-sha-256
生效配置
修改完pg_hba.conf后无需重启PostgreSQL服务,执行重载命令即可生效:sudo systemctl reload postgresql
也可进入psql命令行执行SELECT pg_reload_conf();完成重载。
校验项
- 确认
pg_hba.conf中的认证方式和你数据库用户的加密方式一致,避免出现密码认证失败问题 - 若你修改过PostgreSQL默认端口,确认连接字符串中的端口配置和
postgresql.conf中port参数一致
内容的提问来源于stack exchange,提问作者429
相关产品推荐
相关产品推荐

