PostgreSQL 10.3权限问题:user_remote远程访问数据库异常
解决PostgreSQL user_remote远程访问权限问题
你踩了一个PostgreSQL里很常见的权限误区:GRANT ALL PRIVILEGES ON DATABASE 只是赋予了用户对数据库对象的操作权限,但远程访问的限制是在连接层面单独控制的,和数据库对象权限是完全两回事。下面是一步步的排查和解决方法:
1. 确保PostgreSQL监听外部请求
首先得让数据库愿意接收来自远程的连接请求:
- 找到PostgreSQL的配置文件
postgresql.conf(通常路径是/var/lib/postgresql/10/main/或/etc/postgresql/10/main/,具体看你的系统) - 找到
listen_addresses配置项,修改成:
要是只想允许特定IP(比如你的后端服务器IP)访问,也可以写成listen_addresses = '*'listen_addresses = '192.168.1.100'这种具体IP。
2. 配置客户端访问规则(pg_hba.conf)
这是控制谁能连接数据库的核心配置文件:
- 打开同目录下的
pg_hba.conf - 在文件末尾添加一条规则,允许
user_remote远程访问(建议限定IP段更安全,全开放只是临时测试用):
各字段说明:host all user_remote 0.0.0.0/0 md5host:表示允许TCP/IP连接all:允许访问所有数据库,也可以替换成你的目标数据库名0.0.0.0/0:允许所有外部IP访问,内网环境建议改成你的后端服务器IP段,比如192.168.1.0/24md5:要求用户输入密码认证
3. 重启PostgreSQL服务
修改配置后必须重启服务才能生效:
- Debian/Ubuntu系统:
sudo systemctl restart postgresql@10-main - RHEL/CentOS系统:
sudo systemctl restart postgresql-10
4. 确认user_remote的登录权限
虽然创建用户时默认会带登录权限,但保险起见可以确认一下:
-- 先用user_owner身份连接数据库,执行这条命令 ALTER USER user_remote WITH LOGIN;
5. 测试远程连接
在你的后端服务器上用命令测试连接是否正常:
psql -h <数据库服务器IP> -U user_remote -d <你的数据库名>
如果能成功输入密码并进入数据库,就说明问题解决了。
额外排查点
- 检查数据库服务器的防火墙,确保5432端口(PostgreSQL默认端口)对外开放
- 确认user_remote的密码正确,要是记不清可以用
ALTER USER user_remote PASSWORD '新密码';重置
内容的提问来源于stack exchange,提问作者user3541631
相关产品推荐
相关产品推荐

