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

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

现在我在看

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

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

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

【问题讨论】:

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

标签: java database jdbc


【解决方案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吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多