如何通过JDBC驱动程序在服务器上列出PostgreSQL数据库?

时间:2016-03-17 12:30:01

标签: list postgresql jdbc database-schema

我必须创建一个图形界面,允许用户输入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连接到那个用户,对吗?

1 个答案:

答案 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) 中具有内置的安全系统。您必须对其进行调整(在防火墙之上)以仅允许:

  • 特定IP
  • 和/或特定用户
  • 具有特定的身份验证机制

请注意,PostgreSQL处理SSL,因此您可以信任任何信任的连接,例如, HTTPS。

有关更多信息,请参见current documentation