我必须创建一个图形界面,允许用户输入IP /端口(理想情况下没有其他内容),并列出在此地址找到的所有PostgreSQL数据库。
服务器上的pg_hba.conf文件将以这种方式配置:
host all all 0.0.0.0/0 md5
有没有办法列出数据库而不连接其中一个数据库?
如果我以这种方式设置服务器的配置:
host all all 0.0.0.0/0 trust
我可以使用postgres用户连接到postgres数据库,并以这种方式列出数据库:
try (
Connection conn = DriverManager.getConnection("jdbc:postgresql://<ip>:<port>/postgres", "postgres", null);
PreparedStatement ps = conn.prepareStatement("SELECT datname FROM pg_database WHERE datistemplate = false;");
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
catch (Exception e) { e.printStackTrace(System.err); }
但是信任选项确实是不安全的,不能使用它。但是没有办法在没有给他密码的情况下用JDBC连接到那个用户,对吗?
答案 0 :(得分:0)
没办法,就像您所说的那样:如果没有先连接,就无法查询任何数据库(并且列出数据库 是一种查询)。
希望,如您所见,PostgreSQL在for file in os.listdir(folder+"/"+subfolder):
filepath = folder+"/"+subfolder+"/"+file
target_filepath = target+"/"+subfolder+"/"+file
if os.path.isfile(target_filepath):
continue
print(f"Anonymizing file {filepath}")
forceAnonymizeDICOMFile(filepath, target_filepath)
中具有内置的安全系统。您必须对其进行调整(在防火墙之上)以仅允许:
请注意,PostgreSQL处理SSL,因此您可以信任任何信任的连接,例如, HTTPS。
有关更多信息,请参见current documentation。