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 包权限后 的相关文章

随机推荐