【问题标题】:Db2 9 throwing InvalidDataAccessResourceUsageException instead of PermissionDeniedDataAccessExceptionDb2 9 抛出 InvalidDataAccessResourceUsageException 而不是 PermissionDeniedDataAccessException
【发布时间】:2010-01-14 16:23:31
【问题描述】:

我有一个 Java 应用程序,它查询当前用户帐户可能有权访问或无权访问的数据库表。如果返回异常,我想区分 AccessDenied 和数据库服务器关闭/离线。我预计当用户对表没有选择权限时,db2 会抛出 PermissionDeniedDataAccessException。然而,当我测试它时,db2 抛出了一个 InvalidDataAccessResourceUsageException。

捕获 InvalidDataAccessResourceUsageException 并将其作为 AccessDenied 异常处理是否安全?为什么 db2 不抛出 PermissionDeniedDataAccessException?

仅供参考:我正在为 db2 使用 JDBC 驱动程序,而不是 ODBC 驱动程序,因此我希望获得更好的 Java 支持。

【问题讨论】:

    标签: java spring db2


    【解决方案1】:

    如果 Spring 异常翻译算法错误地将 SQL 异常代码映射到 Spring 的异常,您可以自行确定 SQL 代码并自定义异常翻译,如下所述:12.2.4 SQLExceptionTranslator

    【讨论】:

    • 我其实不知道我可以在 Spring 中制作自己的异常捕获器。这将让我通过捕获特定的 sqlcode 来做到这一点。
    【解决方案2】:

    有趣的是,您已经用“spring”标记了这个问题,尽管您没有进一步提及它。 您应该考虑使用 Spring JdbcTemplate 来访问数据库。因此,所有抛出的异常都将被转换为通用的 Spring 异常,您无需关心具体的 DBMS 异常。它将任何异常转换为 DataAccessException(的子类)。还有PermissionDeniedDataAccessException,如果用户没有权限可能会发生。

    【讨论】:

    • 实际上,我已经在使用 Spring 与 ibatis 的集成,它似乎没有正确处理这种情况。这就是为什么我期望收到 PermissionDeniedDataAccessException 而不是 InvalidDataAccessResourceUsageException(继承自 DataAccessException)。
    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2012-02-13
    • 2019-12-12
    相关资源
    最近更新 更多