对于之前写的一个 oracle 调用Java 代码,实现ftp 文件的上传下载 一篇文章里,里面的操作都是使用 sys oracle系统管理员用户登录的,所以执行任何命令都没有问题,如果是普通用户执行时会出现问题。
执行命令:
SQL> set serveroutput on size 5000;
SQL> call dbms_java.set_output(5000);
Method called
SQL> select FtpUD_downFileTest() as d from dual;
报错如下:
java.security.AccessControlException: the Permission (java.net.SocketPermission 10.254.200.186:21 connect,resolve) has not been granted to HOLLYDM. The PL/SQL to grant this is dbms_java.grant_permission( 'HOLLYDM', 'SYS:java.net.SocketPermission', '10.2
54.200.186:21', 'connect,resolve' )
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:280)
at java.security.AccessController.checkPermission(AccessController.java:429)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:528)
at oracle.aurora.rdbms.SecurityManagerImpl.checkPermission(SecurityManagerImpl.java:192)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1030)
at java.net.Socket.connect(Socket.java:446)
at java.net.Socket.connect(Socket.java:402)
at sun.net.ftp.FtpClient.openPassiveDataConnection(FtpClient.java:316)
at sun.net.ftp.FtpClient.openDataConnection(FtpClient.java:343)
at sun.net.ftp.FtpClient.nameList(FtpClient.java:572)
at FtpUD.getFileList(FTPUD:159)
at FtpUD.downFileTest(FTPUD:358)
初步分析:
1、因为这时用的普通用户登录的,可能没有相关的权限
解决:
第一步、使用sys 管理员用户给普通用户分配权限:
我们只要直接执行报错提示给的命令就可以,命令如下:
dbms_java.grant_permission( 'HOLLYDM', 'SYS:java.net.SocketPermission', '10.254.200.186:21', 'connect,resolve' )
第二步、把 JAVASYSPRIV 角色授予给该用户,这样该用户就可以执行 java程序了。
grant JAVASYSPRIV to user1;//将该角色分配给某用户
如果要删除可以使用:revoke JAVASYSPRIV from user1; //移除某用户该角色