尝试使用DBI进行连接时出现以下错误
DBI connect('database=chaosLRdb;host=192.168.0.1;port=5433','postgres',...) failed: FATAL: no pg_hba.conf entry for host "192.168.0.1", user "postgres", database "chaosLRdb", SSL off
这是我的pg_hba.conf文件:
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
host all postgres 127.0.0.1/32 trust
host all postgres 192.168.0.1/32 trust
host all all 192.168.0.1/32 trust
host all all 192.168.0.1/128 trust
host all all 192.168.0.1/32 md5
host chaosLRdb postgres 192.168.0.1/32 md5
local all all 192.168.0.1/32 trust
我的perl代码是
#!/usr/bin/perl-w
use DBI;
use FileHandle;
print "Start connecting to the DB...\n";
@ary = DBI->available_drivers(true);
%drivers = DBI->installed_drivers();
my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433", "postgres", "chaos123");
我可以知道我想念的是什么吗?
答案 0 :(得分:33)
在你的pg_hba.conf文件中,我看到一些不正确和令人困惑的行:
# fine, this allows all dbs, all users, to be trusted from 192.168.0.1/32
# not recommend because of the lax permissions
host all all 192.168.0.1/32 trust
# wrong, /128 is an invalid netmask for ipv4, this line should be removed
host all all 192.168.0.1/128 trust
# this conflicts with the first line
# it says that that the password should be md5 and not plaintext
# I think the first line should be removed
host all all 192.168.0.1/32 md5
# this is fine except is it unnecessary because of the previous line
# which allows any user and any database to connect with md5 password
host chaosLRdb postgres 192.168.0.1/32 md5
# wrong, on local lines, an IP cannot be specified
# remove the 4th column
local all all 192.168.0.1/32 trust
我怀疑如果你输入密码,如果修剪线条,这可能会有用。要获取md5,您可以使用perl或以下shell脚本:
echo -n 'chaos123' | md5sum
> d6766c33ba6cf0bb249b37151b068f10 -
那么你的连线就像:
my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433",
"chaosuser", "d6766c33ba6cf0bb249b37151b068f10");
答案 1 :(得分:16)
如果你可以改变这一行:
host all all 192.168.0.1/32 md5
有了这个:
host all all all md5
你可以看看这是否解决了这个问题。
但另一个考虑因素是你的postgresql端口(5432)对黑客的密码攻击非常开放(也许他们可以强制密码)。您可以将postgresql端口5432更改为“33333”或其他值,以便他们无法知道此配置。
答案 2 :(得分:6)
您的postgres服务器配置似乎是正确的
host all all 127.0.0.1/32 md5
host all all 192.168.0.1/32 trust
这应该授予从客户端到postgres服务器的访问权限。所以这让我相信用户名/密码失败了。
通过为该数据库创建特定用户来测试它
createuser -a -d -W -U postgres chaosuser
然后调整perl脚本以使用新创建的用户
my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433", "chaosuser", "chaos123");
答案 3 :(得分:4)
要解决此问题,您可以尝试一下。
首先,您通过以下方式找到了pg_hba.conf:
从根目录cd /etc/postgresql/9.5/main
并使用
打开文件sudo nano pg_hba.conf
然后添加此行:
local all all md5
到您的pg_hba.conf,然后使用以下命令重新启动:
sudo service postgresql restart
答案 4 :(得分:2)
要解决此问题,您可以尝试此操作。
首先你找到你的pg_hba.conf并写:
local all all md5
之后重新启动pg server:
postgresql restart
或
sudo /etc/init.d/postgresql restart
答案 5 :(得分:1)
对于那些在尝试连接到本地数据库并尝试使用类似问题时遇到类似问题的人
con = psycopg2.connect(database="my_db", user="my_name", password="admin")
,尝试传递附加参数,以便以下每天保存我:
con = psycopg2.connect(database="my_db", user="my_name", password="admin", host="localhost")
答案 6 :(得分:1)
对于那些在DBeaver中遇到此错误的人,在以下行找到了here解决方案:
@lcustodio,在SSL页面上,设置SSL模式:require并将SSL Factory留空或使用org.postgresql.ssl.NonValidatingFactory
在网络下-> SSL选项卡中,我选中了使用SLL复选框,并设置了高级-> SSL模式= require,现在可以使用了。
答案 7 :(得分:0)
还要检查PGHOST变量:
ECHO $ PGHOST
查看它是否与本地计算机名称匹配
答案 8 :(得分:0)
如果您收到如下错误:
OperationalError: FATAL: no pg_hba.conf entry for host "your ipv6",
user "username", database "postgres", SSL off
然后使用您的mac地址添加如下所示的条目。
host all all [your ipv6]/128 md5
答案 9 :(得分:0)
我的配置位于WebSphere 8.5.5 server.xml文件中
<dataSource
jndiName="jdbc/tableauPostgreSQL"
type="javax.sql.ConnectionPoolDataSource">
<jdbcDriver
javax.sql.ConnectionPoolDataSource="org.postgresql.ds.PGConnectionPoolDataSource"
javax.sql.DataSource="org.postgresql.ds.PGPoolingDataSource"
libraryRef="PostgreSqlJdbcLib"/>
<properties
url="jdbc:postgresql://server:port/mydb?user=fred&password=secret"/>
</dataSource>
这不起作用并且收到错误:
<properties
user="fred"
password="secret"
url="jdbc:postgresql://server:port/mydb"/>
答案 10 :(得分:0)
就我而言,我只是更改了包含IPV4的 spring.postgresql.jdbc.url ,我将其更改为127.0.0.1
答案 11 :(得分:0)
在pg_hba.conf中添加以下内容
hostnossl全部都是0.0.0.0/0信任
然后重新启动服务。
答案 12 :(得分:-2)
在pgadmin中验证postgres连接的主机名/地址,并在连接参数中使用相同的名称。
DBI connect('database = chaosLRdb; host = “保持所提到的内容” ; port = 5433','postgres',...)