10

我对 PostgreSQL 很陌生,所以问题可能很简单。所以。我已经在 Fedora 29 上安装了 PostgreSQL 11 和 pgAdmin 4。我可以通过终端或 AzureDataStudio 连接到数据库,但是当我尝试连接 pgAdmin 时,我得到了这个错误:

无法连接到服务器:

无法连接到服务器:权限被拒绝 服务器是否在主机“127.0.0.1”上运行并接受端口 5432 上的 TCP/IP 连接?

我正在尝试最后三天可以找到的任何东西,但没有任何帮助。这是我的配置:

# I set listen_address in postgresql.conf:
listen_addresses = '*'

# and these are my pg_hba.conf hosts:
local   all             all                     md5

host    all             all     127.0.0.1/32    md5
host    all             all     0.0.0.0/0       md5

host    all             all     ::1/128         md5
host    all             all     ::/0            md5

local   replication     all                     peer
host    replication     all     127.0.0.1/32    ident
host    replication     all     ::1/128         ident

这些配置有问题吗?或者我应该知道通过 pgAdmin 连接的任何提示吗?提前致谢。

更新:

我应该提到我可以通过终端连接到数据库:

psql -h 127.0.0.1 -U postgres

通过 AzureDataStudio 连接不需要任何指定数据。有一个表格是这样的:

在此处输入图像描述

填写表格并提交连接按钮将连接到数据库。此外,我可以通过 JetBrains 的 DataGrip 使用相同的表单和数据连接到数据库。

更新 2:

我在运行 Fedora 30 的本地机器上同时运行 PostgreSQL 和 pgAdmin。

更新 3:

这是我的完整软件信息:

// OS
Fedora 30 64-bit

// PostgreSQL
PostgreSQL 11.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 9.0.1 20190312 (Red Hat 9.0.1-0.10), 64-bit

// pgAdmin
Version    4.8
Copyright    Copyright (C) 2013 - 2019, The pgAdmin Development Team
Python Version    3.7.3 (default, May 11 2019, 00:38:04) [GCC 9.1.1 20190503 (Red Hat 9.1.1-1)]
Flask Version    1.0.2
Application Mode    Server

更新 3:

运行sudo netstat -nlp | grep 5432命令给出了这个结果;

tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      16954/postmaster    
tcp6       0      0 :::5432                 :::*                    LISTEN      16954/postmaster    
unix  2      [ ACC ]     STREAM     LISTENING     952579   16954/postmaster     /var/run/postgresql/.s.PGSQL.5432

更新 4:解决方案!

最后,在Jan Garaj 的回答的帮助下,我找到了解决方案。首先,我安装了SELinux Troubleshooter应用程序:

sudo dnf install setroubleshoot

然后我启动了疑难解答。接下来,我尝试通过pgAdmin4连接到数据库。故障排除程序给了我 2 个错误,其中包含运行这些命令的建议解决方案:

sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_network_connect_db 1
4

3 回答 3

3

检查 SELinux 审计日志 - https://fedoraproject.org/wiki/SELinux_FAQ#How_do_I_find_out_whether_SELinux_is_denying_access_for_any_software.3F

我在我的测试 CentOS 7 系统上看到拒绝:

type=AVC msg=audit(1560101981.565:1942): avc:  denied  { name_connect } for  pid=63140 comm="httpd" dest=5432 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:postgresql_port_t:s0 tclass=tcp_socket permissive=0
type=SYSCALL msg=audit(1560101981.565:1942): arch=c000003e syscall=42 success=no exit=-13 a0=15 a1=7f741c06dfe0 a2=10 a3=7f742f9147b8 items=0 ppid=63139 pid=63140 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

我想,你的 Fedora 中也会有类似的问题——你需要调整使用的 SELinux 策略。

于 2019-06-09T17:51:00.440 回答
0

在centos 7上

# setsebool -P httpd_can_network_connect_db 1

你去吧

于 2020-09-16T08:51:04.073 回答
-1

假设您可以通过终端连接到数据库:尝试使用管理员帐户运行pgAdmin4 。root

进一步验证您的安装和配置

复制 pgAdmin 4 示例配置。

cp /etc/httpd/conf.d/pgadmin4.conf.sample /etc/httpd/conf.d/pgadmin4.conf

mkdir /var/log/pgadmin4/
mkdir /var/lib/pgadmin4/

创建/编辑 config_local.py 文件。

vi /usr/lib/python2.7/site-packages/pgadmin4-web/config_local.py

添加以下设置。

LOG_FILE = '/var/log/pgadmin4/pgadmin4.log'
SQLITE_PATH = '/var/lib/pgadmin4/pgadmin4.db'
SESSION_DB_PATH = '/var/lib/pgadmin4/sessions'
STORAGE_DIR = '/var/lib/pgadmin4/storage'

更改目录的权限,以便 Apache 可以将数据写入其中。

chown -R apache:apache /var/lib/pgadmin4/*
chown -R apache:apache /var/log/pgadmin4/*

运行以下命令为 pgAdmin 4 Web 界面创建用户帐户。

python /usr/lib/python2.7/site-packages/pgadmin4-web/setup.py

pgAdmin4 带有服务器和桌面部署,在这里我们假设桌面如果你仍然面临问题分享你的日志

于 2019-06-08T06:56:39.953 回答