gpt4 book ai didi

java - 执行xp_cmdshell 'wmic ... "java -jar .. ."'时使用哪个帐户

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:59 24 4
gpt4 key购买 nike

我有一个 jar 文件,我想将其作为 SQL 作业 中的一个步骤运行。但是,jar 文件必须在 ma​​chineA 上运行,但 SQL 作业计划在 serverA 上。

为了实现这一点,在 serverA 的 SQL 作业中,我使用 xp_cmdshell 向终端发出 wmic 命令。

xp_cmdshell 允许我从 T-SQL 脚本发出终端命令

wmic 允许我向机器发出终端命令(在本例中为 java -jar 命令)

下面是我使用的命令

EXEC master..xp_cmdshell 'wmic /user:mydomain\myuser /password:mypassword /node:machineA process call create "cmd /c java -jar D:\jars\saveToSharedFolder.jar"'

saveToSharedFolder.jar是一个java应用程序,它从数据库中提取数据并将其写入Excel文件,然后将此Excel文件保存到位于服务器中的共享文件夹,例如\serverA\files\savedData.xlsx

文件savedData.xlsx 未保存在\serverA\files 中。

当我尝试将 java 错误消息输出到文件时,我得到了这个。

java.io.FileNotFoundException: \\serverA\files\savedData.xlsx (Access is denied)
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : null
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:602)
at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1557)
at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:248)
at saveToSharedFolder.saveData(saveToSharedFolder.java:115)
at saveToSharedFolder.main(saveToSharedFolder.java:46)
... 5 more
Caused by: java.lang.NullPointerException
at java.util.zip.DeflaterOutputStream.<init>(Unknown Source)
at java.util.zip.DeflaterOutputStream.<init>(Unknown Source)
at java.util.zip.ZipOutputStream.<init>(Unknown Source)
at java.util.zip.ZipOutputStream.<init>(Unknown Source)
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:531)
... 9 more

我知道这是一个文件夹权限问题。但是,我很不知道该给哪个帐户授予该文件夹的写入权限。

当我尝试使用 wmic 命令中使用的 mydomain\myuser 和 mypassword 登录 machineA 并在 machineA 中运行 jar 文件时,它成功保存了\serverA\files\savedData.xlsx

我还尝试授予运行 EXEC master..xp_cmdshell 'whoami' 时获得的 nt 服务 帐户。因为那是运行 wmic 帐户的帐户,对吧?但它仍然没有创建\serverA\files\savedData.xlsx

这很奇怪,因为我使用 mydomain\myusermypassword 启动了 wmic,所以 jar 文件不应该使用 myuser 的凭据运行,从而能够创建\serverA\files\savedData.xlsx 吗?

最佳答案

如果调用登录是 sysadmin 角色成员,xp_cmdshell 将在 SQL Server 服务帐户的安全上下文下运行。对于非 sysadmin 角色成员,xp_cmdshell 在 xp_cmdshell proxy account 的安全上下文下运行.

不确定为什么使用 T-SQL 来调用该流程。相反,请考虑使用 CmdExec 作业步骤类型直接执行命令。您可以在作业步骤配置中指定所需的进程安全上下文(SQL Server 代理服务帐户或代理)。请参阅https://msdn.microsoft.com/en-us/library/ms190264.aspx .

关于java - 执行xp_cmdshell 'wmic ... "java -jar .. ."'时使用哪个帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com