我配置了一个作业,它在远程位置传输文件。
我的命令在命令提示符下运行得非常好,但是当我在 sql server 作业中配置它时,它会导致登录失败,未知用户名或密码错误。
我无法找出未传输此文件的确切原因。
如果我的代码中有错误,那么它应该在命令提示符下给出相同的错误。谁能帮我理解为什么我会收到错误?
我配置了一个作业,它在远程位置传输文件。
我的命令在命令提示符下运行得非常好,但是当我在 sql server 作业中配置它时,它会导致登录失败,未知用户名或密码错误。
我无法找出未传输此文件的确切原因。
如果我的代码中有错误,那么它应该在命令提示符下给出相同的错误。谁能帮我理解为什么我会收到错误?
这可能是因为尝试移动文件的用户是运行作业的用户(可能是配置 SQL Server 代理运行的用户)。尝试在您正在从中读取文件的文件夹上授予该用户读取权限,并在您正在写入文件的文件夹上写入权限。
问题已解决。由于远程位置文件夹是共享的,并且每个人都可以访问。我的命令在命令提示符下运行良好,甚至任何用户都能够在该位置创建自己的文件,并且还能够从该位置删除文件。
该问题与用户有关。我的工作由servername\administrator执行,并且 由于发生密码错误错误而更改了远程位置管理员密码。我告诉我的 IT 团队这个问题,他们将服务器密码重置为旧密码,我的工作开始正常工作。
问题解决了。
我只是想知道我的 sql 作业如何在我浏览我的作业脚本时验证服务器登录,但发现没有任何关于身份验证的帮助。
谁能给我解释一下。
谢谢
尼特什·库马尔
从命令行运行的批处理文件失败的主要原因是
%
迹象。在命令行上,需要一个 % ,所以
for %a in (*.exe) do echo %a
工作正常,但如果你想在批处理文件中使用相同的命令,你必须加倍 % 符号,这使得该命令现在for %%a in (*.exe) do echo %%a
这仅适用于您自己计算的那些 - 使用
%TEMP%
不会改变的变量。这很有趣,因为所有权限都一次又一次地重叠。
让我解释,
您的 Sql 作业作为您连接到服务器的不同用户运行(在某些情况下它们是相同的,但这是最好的情况)。您可以通过在 Sql Server 编辑器上运行此命令来检查这一点(也启用 xp_cmdshell):
并将其与控制台结果(以 JhonDoe 登录)进行比较:
这通常采用两种结果不同的情况,因此您可能会猜测脚本正在以不同的用户身份执行,因此该用户可能具有不同的权限。
然后,您需要了解每当您尝试连接到共享文件夹时。除非您与共享文件夹的所有者是同一用户,否则您将被要求输入用户名和密码。但是,这可能会让您产生误解。
windows 真正做的是尝试使用您登录的相同凭据连接到共享文件夹:
您已在名为 PC1 的计算机上以 JhonDoe 的身份使用密码 123456 登录,因此您的用户如下所示:
共享文件夹属于 JhonDoe,密码为 123456(此用户使用此密码创建了共享文件夹),托管共享文件夹的计算机名为 PC2 显示如下:
当 Windows 尝试连接到共享文件夹时,它使用 PC1 登录 (JhonDoe 123456),因为这是您的本地登录,然后它与远程登录信息进行比较,并与 PC2 登录 (JhonDoe 123456) 完全匹配。就在那时,它使您无需任何密码提示即可访问共享文件夹。
但是,当它面临这种情况时:
PC1 (JhonDoe-12345)
PC2 (JhonDoe-123456)
凭据不匹配,因为它们具有不同的密码。然后它失败了,因为他们实际上是不同的用户。