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

Posted

技术标签:

【中文标题】如何通过 JDBC 驱动列出服务器上的 PostgreSQL 数据库?【英文标题】:How to list PostgreSQL databases on server via JDBC driver? 【发布时间】:2016-03-17 12:30:01 【问题描述】:

我必须制作一个图形界面,允许用户输入 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 连接到该用户,对吧?

【问题讨论】:

尝试使用这个解决方案:link 【参考方案1】:

没办法,正如你所说:如果没有先连接,你就不能查询任何数据库(并且列出数据库一种查询)。

如您所见,希望 PostgreSQL 在pg_hba.conf 中有一个内置的安全系统。您必须调整它(在防火墙顶部)以仅允许:

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

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

更多信息请参见current documentation。

【讨论】:

以上是关于如何通过 JDBC 驱动列出服务器上的 PostgreSQL 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Drill 0.9 和 SQuirreL SQL 客户端 - 无法列出 JDBC 驱动程序

JAVA基础--JDBC

Xampp 服务器上的 Java 小程序 - 在 jdbc:mysql://localhost:3306/ 上找不到合适的驱动程序

如何判断 gdal 驱动已经注册

通过 JDBC 连接到远程 db2 数据库失败

如何通过 registerDriver() 方法加载 type-2 JDBC 驱动程序?