gpt4 book ai didi

security - 只有在完全限定 exe 路径时才会出现权限问题。为什么不总是?

转载 作者:行者123 更新时间:2023-12-04 04:41:05 24 4
gpt4 key购买 nike

当我尝试执行 SQL Server 2012 BCP.exe使用 exe 的完全限定路径将表的内容转储到文件的实用程序,

D:\SQL2012\110\Tools\Binn\bcp.exe DBNAME.DBO.TABLENAME OUT %FileServerProject%\IMPLEMENTATION\DAT\Pre_Run_BaseTables\CDB_ACCT_CURR.DAT -S%SqlServer% -T -N >> %LogFolder%\Log.log



...我收到 ACCESS DENIED 错误。

但是,当我删除 exe 的完全限定路径并运行时,

bcp.exe DBNAME.DBO.TABLENAME OUT %FileServerProject%\IMPLEMENTATION\DAT\Pre_Run_BaseTables\CDB_ACCT_CURR.DAT -S%SqlServer% -T -N >> %LogFolder%\Log.log



它工作正常。

如果路径不合格,我的理解是 Windows 将搜索 PATH 中指定的每个文件夹。寻找指定的 exe 的环境变量,并执行第一个找到的。所以,我从控制台执行了以下命令来查看我的 PATH多变的。
ECHO %PATH%

清理输出中的杂项无关路径,我看到以下与 SQL 相关的文件夹按此顺序返回:
D:\SQL2012\110\DTS\Binn\;
D:\SQL2012 (86)\110\Tools\Binn\;
D:\SQL2012\110\Tools\Binn\;

后者 Tools\Binn path 是唯一包含 bcp.exe 的文件夹公用事业。

我的问题是这样的:

由于无论我明确限定路径还是离开 Windows 以通过搜索路径变量来查找它,都执行了相同的 EXE,为什么当我使用完全限定的路径而不是当我没有限定路径运行时会收到 ACCESS DENIED 错误?

请注意,在这两种情况下,我都在对 TOOLS\BINN 具有读取和执行权限的 ID 下运行。文件夹。在我使用完全限定路径的情况下,如果我将帐户添加到本地组,它会起作用,但这不是一个可行的解决方案。此外,ID 有 LogOn As Batch服务器的权利。

更新:

我现在毫不怀疑,当我使用不合格的 bcp.exe 执行时我实际上正在运行 bcp.exe 的唯一副本的路径在服务器上。首先,我使用了 搜索一切 广泛搜索服务器上的每个驱动器。我发现了三个事件。然后我重命名了我不想意外引用的 2。

然后我使用不合格的 bcp.exe 重新运行该作业路径并使用任务管理器的 流程标签,我找到了 bcp.exe在服务帐户下运行。然后我右键单击文件名并选择上下文菜单“打开文件位置”,它把我带到了 bcp.exe 的唯一位置。未重命名的文件——我有意尝试使用完全限定名称定位的文件。

D:\SQL2012\110\Tools\Binn

由于 bcp.exe 不合格,它运行成功。

更新 2
到目前为止,已有 42 人看过这个。我很好奇人们是否会看到这句话“那是不可能的,这个案子的事实一定与我所说的不完全一样。”

差不多了:
我将批处理文件简化到最低限度以重现问题。你会注意到我改变了我们的真实路径名,但我保留了它的要点。

这是“之前”代码:
 ----------------------------------------------------------------
Output of messages for workload object TESTDUMP/GHG9999I.11/MAIN
Start date Fri Sep 25 13:33:36 2015
----------------------------------------------------------------

C:\Users\MyServiceAccount>WHERE bcp.exe
INFO: Could not find files for the given pattern(s).

C:\Users\MyServiceAccount> D:\SQL2012\110\Tools\Binn\bcp.exe MyDB.DBO.MyTable OUT \\MyFileServer\IMData\MyDB_SOURCE\IMPLEMENTATION\DAT\Pre_Run_BaseTables\MyTable.DAT -S MyDbServer\int -T -N 1>>\\MyFileServer\IMData\MyDB_SOURCE\Logs\MyTable_BCP_out.log
Access is denied.

C:\Users\MYSERVICEACCOUNT>ECHO RESULT=1
RESULT=1

这是有效的“之后”
 ----------------------------------------------------------------
Output of messages for workload object TESTDUMP/GHG9999I.10/MAIN
Start date Fri Sep 25 13:33:00 2015
----------------------------------------------------------------

C:\Users\MyServiceAccount>WHERE bcp.exe
INFO: Could not find files for the given pattern(s).

C:\Users\MyServiceAccount>"D:\SQL2012\110\Tools\Binn\bcp.exe" MyDB.DBO.MyTable OUT \\MyFileServer\IMData\MyDB_SOURCE\IMPLEMENTATION\DAT\Pre_Run_BaseTables\MyTable.DAT -S MyDbServer\int -T -N 1>>\\MyFileServer\IMData\MyDB_SOURCE\Logs\MyTable_BCP_out.log

C:\Users\MYSERVICEACCOUNT>ECHO RESULT=0
RESULT=0

请注意,不同之处在于有效的 BCP 路径用引号括起来。我会认为只有当路径包含嵌入的空格时,这才会很重要。我很困惑为什么在这种情况下很重要。

第二个新问题是为什么 WHERE命令在 MYSERVICDEACCOUNT 下运行时失败通过调度程序。当我在 MYLANID 下手动登录时,该命令有效,导航至 c:\users\mylanid ,试试看。

如果有人能解释为什么这些报价很重要,他们会得到 100 分和我的感谢。

更新 4:

我在使用相同代码的服务器上找到了 AgentParm.txt 文件。它位于 Program Files 文件夹下:
# Agent settings for nt-x86-64
agentname=MyWorkingServer
log.archive=2
oscomponent.jvm=server

在我们一直在讨论批处理文件未引用时出现问题的服务器上,我在 Program Files (x86) 文件夹中看到以下内容。所有其他行都相同,所以我排除了它们。我没有看到任何提到 oscomponent.cmdprefix.force.quotes.full 的内容。
# Agent settings for nt-x86-32

agentname=MyServer

我是否需要 64 位版本的 CA 调度程序才能运行 64 位 exe?如果是这样,使用 64 位 CW 调度程序运行 32 位 exe(如 SQL Server dtexec.exe)是否会出现问题?

最佳答案

会不会和你指出的有关?可能不经意间

32位D:\SQL2012 (86)\110\Tools\Binn\ 64位D:\SQL2012\110\Tools\Binn\您的艰难路径是调用 64 位,而您的 %PATH%变量首先找到 32Bit 版本。

关于security - 只有在完全限定 exe 路径时才会出现权限问题。为什么不总是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32663377/

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