java.sql.SQLException: ORA-06550: 第 1 行,第 13 列:授予用户 EXECUTE 包权限后

2024-01-01

我花了几个月的时间开发一个带有 Oracle 数据库后端的 JAVA 应用程序。我使用 Netbeans 作为我的 IDE,并在笔记本电脑上使用 Oracle 12c 作为我的数据库。所有 PL/SQL 均已编译,没有错误。

经过广泛的测试(以架构所有者身份登录),我尝试添加用户。我创建了用户,以 SYS_DBA 身份登录,使用CREATE USER E566299 IDENTIFIED BY tempPswrd,然后使用授予权限GRANT CREATE SESSION and GRANT EXECUTE ON C##FAI_CODE.FAI_ADMIN_PKG TO E566299并收到Grant succeeded确认。

我以新用户身份登录我的应用程序,使用以下命令没有出现任何错误:

private static Connection getDbConn(String user, String password) throws SQLException{
        OracleDataSource ods = null;
        Connection dbConn = null;
        user = "c##" + user;
            ods = new OracleDataSource();
            ods.setURL("jdbc:oracle:thin:@//localhost:1522/orcl.global.ds.XXXXXXXX.com");
            ods.setUser(user);
            ods.setPassword(password);
            dbConn = ods.getConnection();
        return dbConn;
    }

然后它在第一个包过程调用时抛出错误:

java.sql.SQLException: ORA-06550: 第 1 行,第 13 列: PLS-00201:必须声明标识符“FAI_ADMIN_PKG.CHECK_USER_FOLLOWED” ORA-06550: 第 1 行,第 7 列: PL/SQL:语句被忽略

在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) 在 oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399) 在 oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017) 在 oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655) 在 oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249) 在 oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566) 在 oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:210) 在 oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:53) 在 oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:938) 在 oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1075) 在 oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820) 在 oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3923) 在 oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:5617) 在 oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1385) 在 faidb.FAIdb.checkSubscription(FAIdb.java:549) 在 faidb.faidbUI.run(faidbUI.java:186) 在 faidb.faidbLogin$3.run(faidbLogin.java:133) 在 java.awt.event.InvocableEvent.dispatch(InvocableEvent.java:311)

我不知所措,我尝试了授予措辞、全部大写、全部小写、单引号、双引号以及模式所有者名称前缀的所有可能组合C##FAI_CODE.FAI_ADMIN_PKG, 没有FAI_ADMIN_PKG,没有任何东西可以允许这个新用户执行该包。

我在这个项目上花费了相当多的时间,并且对没有人能够使用它感到恐慌。

问题:

为什么我新创建的用户获得权限后无法执行包?

Edit:

I get a NullPointerException在最后一行调用rset.close();,结果集从未初始化,但它不会抛出SQLException

public Vector<String> fillBox() throws SQLException, NullPointerException{
        CallableStatement callStatement = null;
        ResultSet rset = null;
        String fillBox = "{call fai_admin_pkg.get_end_item_pn(?)}";
        Vector<String> boxFill = new Vector<>();
        try{
            callStatement = conn.prepareCall(fillBox); 
            callStatement.registerOutParameter(1, OracleTypes.CURSOR);
            callStatement.execute();
            rset = (ResultSet) callStatement.getObject(1); 
            boxFill = buildRsVector(rset);
        }
        finally{
            callStatement.close();
            rset.close();
        }
        return boxFill;
    }

这就是这里所说的:

Vector<String> boxFill = new Vector<>();
            try{
                boxFill = uiInst.fillBox();
            }catch(SQLException e){
                JOptionPane.showMessageDialog(frame, e.getMessage());
            }catch(NullPointerException e){
                JOptionPane.showMessageDialog(frame, e.getMessage());
                e.printStackTrace();
            }

Here are my permissions as the new user...which do not include execute on the package?? I'm not understanding no permission after granted


问题解决了。没有全局同义词集或current_schema对于设置为包所有者的新用户会话,将导致对所有者包过程的任何调用都需要所有者的前缀:<package owner>.<package>.<procedure>。我在新用户下拨打的电话只是为了<package>.<procedure>导致SQLException被抛出是因为对于编译器来说该包不存在。

此外,我将研究全局同义词和用户会话,以避免必须使用此快速修复。

谢谢您的帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.sql.SQLException: ORA-06550: 第 1 行,第 13 列:授予用户 EXECUTE 包权限后 的相关文章

  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • 在 Qt 中旋转图像

    在我的应用程序中 我想旋转图像 我已将图像设置为QLabel 我已经设置了一个QPushButton 单击该按钮时我想向四个方向旋转图像 右 gt 底部 gt 左 gt 顶部 有什么帮助吗 假设您有一个指向 QLabel 的指针 您可以执行
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • Kafka Java Consumer 已关闭

    我刚刚开始使用卡夫卡 我面临着消费者的一个小问题 我用Java写了一个消费者 我收到此异常 IllegalStateException 此消费者已关闭 我在以下行中遇到异常 ConsumerRecords
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • 正则表达式在 Velocity 模板中不起作用

    我在 Test java 中尝试过这个 String regex lt s br s s gt String test1 lt br gt System out println test replaceAll regex 但是当我在速度模板
  • java.lang.Object的hashCode具体使用的算法是什么

    中使用的算法是什么JVM实施java lang Object的隐含的hashCode 方法 OpenJDK or Oracle JDK答案中首选 它依赖于实现 并且在很大程度上 该算法是entirely取决于实施 只要它是一致的 但是 根据
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 将现有 eclipse 项目导出到 war 文件时出现“模块名称无效”

    我正在尝试将现有 Eclipse 项目导出到 war 文件 但无论我在 WAR Export 对话框页面中输入什么 系统总是返回 模块名称无效 我不知道如何解决这个问题 谢谢您的帮助 我有同样的问题 我修复了它 请按照以下步骤操作 您可以创
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • 在 Word 2010 中开发功能区选项卡,在组标签名称中使用 & 符号

    我正在开发一个用于模板的功能区选项卡 MyTemplate dotm 对于 Word 2010 我的问题 我想在组的标签中使用与号 我尝试了很多方法 也用谷歌搜索了很多关于这个问题的信息 但没有任何效果 named amp decimal
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque
  • 在 Freemarker 模板中检查 Spring 安全角色和记录的用户名

    有谁知道 freemarker 标签来检查 freemarker 文件中的 spring 安全角色和用户名 我从网络上的几个资源中发现以下代码将打印登录的用户名 但它没有打印用户名 而是打印 登录为
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • 如何使用注释处理 Hibernate 和 Spring 中的连接查询?

    我正在使用 Spring 和 Hibernate 以及 MySQL 开发应用程序 我是 Hibernate 新手 完成了基本任务 现在我需要在选择查询中应用联接以使用注释从多个表中获取数据 我已经搜索过但仍然没有任何想法 这是我的数据库表和

随机推荐