如何通过 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
中有一个内置的安全系统。您必须调整它(在防火墙顶部)以仅允许:
请注意,PostgreSQL 处理 SSL,因此您可以信任它的连接,就像您可以信任任何连接一样,例如HTTPS。
更多信息请参见current documentation。
【讨论】:
以上是关于如何通过 JDBC 驱动列出服务器上的 PostgreSQL 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
Apache Drill 0.9 和 SQuirreL SQL 客户端 - 无法列出 JDBC 驱动程序
Xampp 服务器上的 Java 小程序 - 在 jdbc:mysql://localhost:3306/ 上找不到合适的驱动程序