2015-03-12 14 views
14

Ho dato le seguenti autorizzazioni per il permesso e chiamare CMD.EXE sembra funzionare come mostrato nell'esempio di codice seguente.Come chiamare un .exe da PL/SQL?

Tuttavia, non è possibile ottenere alcuna uscita da whoami.exe. Vedo che la directory predefinita è C:\app\oramgr\product\12.1.0\dbhome_1\database\ che viene visualizzata nel file JJJ.TXT. Tuttavia, il file JJJ_WHOAMI.TXT non contiene nulla.

Qualche suggerimento?

dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\WINDOWS\SYSTEM32\CMD.EXE', 'execute'); 
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Windows\System32\whoami.exe', 'execute'); 
dbms_java.grant_permission('PWATSON', 'SYS:java.lang.RuntimePermission', '*', 'writeFileDescriptor'); 
dbms_java.grant_permission('PWATSON', 'SYS:java.lang.RuntimePermission', '*', 'readFileDescriptor'); 

dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Users\pwatson', 'read, write'); 
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Users\pwatson\*', 'read, write'); 
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\temp', 'read'); 

SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c CD C:\Users\pwatson\src\java ^& ECHO ^%CD^% ^& EXIT 4') as y from dual; 
     Y 
---------- 
     4 

C:\app\oramgr\product\12.1.0\dbhome_1\DATABASE 
SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c ECHO ^%CD^% >jjj.txt ^& EXIT 7') as y from dual; 
     Y 
---------- 
     7 

SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c C:\Windows\System32\whoami.exe >jjj_whoami.txt') as y from dual; 
     Y 
---------- 
     0 


C:\app\oramgr\product\12.1.0\dbhome_1\database>type JJJ.TXT 
C:\app\oramgr\product\12.1.0\dbhome_1\DATABASE 

C:\app\oramgr\product\12.1.0\dbhome_1\database>type JJJ_WHOAMI.TXT 
+0

quale utente Windows è in esecuzione il servizio server di database? Per eseguire un test, provare a eseguire il servizio con un'altra finestra e provare nuovamente a eseguire la frase. – Turrican

+0

Quando l'ho visto su un PDB, era l'utente "oracle". Nell'installazione non PDB è "oramgr". Cosa intendi per "un altro Windows"? – lit

+0

Quale versione di Windows si utilizza? –

risposta

2

Forse Oracle non è nessuno quando esegue whoami su Windows? Una buona idea è cambiare l'utente che avvia il servizio.


La terza chiamata è leggermente diversa dalla seconda. Non hai chiamato per un'uscita.

provare il seguito:

select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c C:\Windows\System32\whoami.exe >jjj_whoami.txt ^& EXIT 8') as y from dual;