如何从 PL/SQL 调用 .exe?
Posted
技术标签:
【中文标题】如何从 PL/SQL 调用 .exe?【英文标题】:How to call a .exe from PL/SQL? 【发布时间】:2015-03-12 15:50:31 【问题描述】:我已授予以下权限,并且调用 CMD.EXE
似乎可以正常工作,如下面的代码示例所示。
但是,我无法从whoami.exe
获得任何输出。我可以看到默认目录是C:\app\oramgr\product\12.1.0\dbhome_1\database\
,它出现在JJJ.TXT
文件中。但是,JJJ_WHOAMI.TXT
文件不包含任何内容。
有什么建议吗?
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
【问题讨论】:
什么 windows 用户正在运行数据库服务器服务?要进行测试,请尝试在另一个窗口中运行该服务并再次尝试运行该语句。 当我之前在 PDB 上看到它时,它是“oracle”用户。在非 PDB 安装上,它是“oramgr”。 “另一个 Windows”是什么意思? 你用的是什么windows版本? asktom.oracle.com/pls/apex/… 当 Oracle 在 Windows 上运行whoami
时,它可能是个无名小卒?
【参考方案1】:
当 Oracle 在 Windows 上运行 whoami
时,它可能是个无名小卒?好主意是更改启动服务的用户。
第三次调用与第二次略有不同。你没有要求退出。
试试下面的:
select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c C:\Windows\System32\whoami.exe >jjj_whoami.txt ^& EXIT 8') as y from dual;
【讨论】:
以上是关于如何从 PL/SQL 调用 .exe?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Javascript 函数中调用 PL/SQL 变量?
如何从 R 调用存储在 Oracle 数据库中的 PL/SQL 过程
使用 callproc 从 django 调用 PL/SQL 过程