每个新会话都需要 dbms_java.grant_permission

问题描述 投票:0回答:2

我正在尝试实现java RMI客户端服务器连接,我在NetBeans IDE中创建了我的服务器,并在oracle数据库中创建了客户端类作为java存储过程,并通过我的PLSQL块中的oracle函数使用它,一切正常,但我陷入了一些困境问题如下:

我在SYSTEM用户中制作了这个java存储过程,并通过SYSDBA将

dbms_java.grant_permission('SYSTEM','java.net.SocketPermission','192.168.43.25:*','connect,resolve')
提供给SYSTEM用户,“*”用于所有可用端口。我从我的服务器得到了完美的响应,但直到特定的会话到期。

每当我从系统用户注销并再次登录时,它都会再次抛出异常

the Permission ("java.net.SocketPermission" "192.168.43.25:56792" "connect,resolve") has not been granted
请指导我如何摆脱这个重复的任务?因为在开发环境中我将管理它,但是如何在这个问题下将其部署到生产环境中。我的环境是Oracle DB 18c XE,谢谢!

以下是我的java存储过程:

create or replace and compile java source named rmi as
package rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.Naming;
import java.security.Policy;




 public class RmiClient {

    public RmiClient(){
    }

    public static String getRequestFromClient(){
        Policy.setPolicy(new MyPolicy());
        String result = "";
        try {
            IServer server = getServer();
            result = server.getRequestFromClient();
        } catch (Exception ex) {
            result = ex.getMessage().toString();
        }
        return result;

    }
    private static IServer getServer() throws Exception {
        Parameter configurationParameters = new Parameter();
        IServer server = (IServer) Naming.lookup( configurationParameters.objectName);

        return server;
    }
    }

java database oracle oracle11g rmi
2个回答
2
投票

使用

DBMS_JAVA
授予权限与典型的 Oracle 授予略有不同。使用
DBMS_JAVA.GRANT_PERMISSION
授予权限后,您需要在执行授予后的某个时刻
COMMIT
才能使其永久生效。请注意
Oracle 文档
中的
COMMIT
调用之后有一个 DBMS_JAVA


0
投票

交换你的“提交”和“结束”语句

© www.soinside.com 2019 - 2024. All rights reserved.