开发者

Unix commands through Oracle

开发者 https://www.devze.com 2023-03-29 23:33 出处:网络
I have created a PL/SQL a Java Source, and privileges have been grante开发者_JAVA技巧d. The PL/SQL procedure is executing and no error is coming up.

I have created a PL/SQL a Java Source, and privileges have been grante开发者_JAVA技巧d.

The PL/SQL procedure is executing and no error is coming up. Within the JavaSource there is the following unix command:

ls -al > /orion/list/list.txt

the file List.txt is not being created within the directory.

How would i know the problem if no errors are coming up? Could this be a problem of rights being given to oracle from unix.

Oracle is on unix sun solaris


From a distant memory, I am fairly certain you need to grant some privileges to the user executing the Java before it is allowed to execute unix commands.

Have a look at http://download.oracle.com/docs/cd/B28359_01/java.111/b31225/chten.htm

I think you need to give it java.io.FilePermission permission. One way to do this is to grant the role JAVASYSPRIV to your user. I have nowhere to test this out at the moment, but if that is not correct the link above should point you in the correct direction.


I concur with Stephen ODonnell.

I have implemented the exact same Java functionality (creating a file containing a directory listing) recently.

I needed to grant the following:

-- this grants read privilege on STDIN
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.lang.RuntimePermission', 
   permission_name => 'readFileDescriptor', 
   permission_action => null
);

-- this grants write permission on STDOUT
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.lang.RuntimePermission', 
   permission_name => 'writeFileDescriptor', 
   permission_action => null
);

-- this grants execute privilege for the 'ls' command
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.io.FilePermission', 
   permission_name => '/bin/ls', 
   permission_action => 'execute'
);

-- this grants read, write, delete and execute on all 
-- of the referenced directories (subdirectories of <directory>)
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.io.FilePermission', 
   permission_name => '<directory>/-', 
   permission_action => 'read,write,delete,execute'
);

-- this grants execute on sh
EXEC dbms_java.grant_permission(
   grantee => '<username>', 
   permission_type => 'SYS:java.io.FilePermission', 
   permission_name => '/bin/sh', 
   permission_action => 'read,execute' 
);

Hope this helps. Ollie.

0

精彩评论

暂无评论...
验证码 换一张
取 消