使用 jdbc 获取允许用户使用的所有表

Posted

技术标签:

【中文标题】使用 jdbc 获取允许用户使用的所有表【英文标题】:Get All tables allowed to user with jdbc 【发布时间】:2016-01-21 16:28:54 【问题描述】:

我正在使用 jdbc 连接到数据库,从数据库中获取所有模式和表的列表(我假设某些数据库此时可能只返回当前用户可以查询的表,但有些数据库返回完整的表列表) 并且当用户尝试查询某些表时,他会收到“权限不足”错误。 有没有办法只获取表,用户只能使用 jdbc 功能进行查询?无需向数据库写入特殊查询。

现在我在看

      DatabaseMetaData dbMeta = connection.getMetaData() 
      dbMeta.getTablePrivileges(null, null, null);

但是从这个查询的结果来看,用户究竟可以查询哪些表还不是很清楚。

目前我正在使用 SAP HANA 数据库,但通常它可能是任何数据库,所以我正在寻找一些通用方法。

【问题讨论】:

你得到了什么输出,还有什么不清楚的地方? 请查看 Ashraff Ali Wahab 的帖子和我的评论。我有文档中描述的结果集,我不清楚这个结果集是否与我正在查询的用户相关,或者这是数据库中所有表的列表? 【参考方案1】:

请看

http://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html#getTablePrivileges%28java.lang.String,%20java.lang.String,%20java.lang.String%29

您必须从 ResultSet 中获取每一行,并查询包含表名的列名 TABLE_NAME 和包含每个表的访问权限的 PRIVILEGE。

【讨论】:

所有这些权限是否与用户相关,我正在使用谁的凭据进行查询,或者这是数据库中所有表的列表以及所有可以查询它们的人的列表? 如果我获取所有具有“选择”权限的表,则会出现“权限不足”错误。我试图选择被授权者列等于当前用户名或公共的表。但仍有一些未选中的表,但用户可以查询它们。 有趣。你看过javadoc吗?

以上是关于使用 jdbc 获取允许用户使用的所有表的主要内容,如果未能解决你的问题,请参考以下文章

JDBC - 从 OpenOffice 数据库中获取所有表名

使用 oracle jdbc 连接时如何获取数据库模式名称?

如何获取 JDBC 中所有表的主键?

通过jdbc获取数据库中的表结构

Snowflake 中是不是有办法允许用户在程序上获取 ddl 但没有使用或所有权权限?

如何使用 jdbc 在 teradata 上获取表创建脚本?