好的。我确实看到已经提出了很多类似的问题。从表面上看,我似乎不应该问这个问题,因为很多人已经尝试回答这个问题,但是我将解释我的情况是不同的:
首先设置:
我在负载均衡器后面有两个服务器
服务器A:将Windows服务作为域Service_account运行 服务器B:将Windows服务作为域service_account
运行,然后此Windows服务最终调用SQL Server执行存储过程,该存储过程当然会尝试从\ network \ location上的文件进行批量插入。现在,我不知道他的信息有多重要,但是这个网络位置实际上是在Server B
上作为网络共享共享的文件夹,因此基本上\ network \ location =服务器B:C /某物。
现在,我已经将所有人添加为该文件夹中的用户,并将其设置为完全控制,以确保尝试访问该文件夹的任何人都没有权限问题。
现在,我确实收到此错误:Cannot bulk load because the file “" could not be opened. Operating system error code 5(Access is denied.).
仅有时。这里的整个问题是该错误不能始终如一地再现。它仅每周发生一次。我尝试绕过负载平衡器并直接从服务器发出请求,但没有发现任何问题。另外,我还观察到在此失败请求之前和之后发出的请求都是成功的。这意味着in a true sense
是偶发错误。
浏览SO之后,我发现传统上导致此错误的两个主要原因是:
真正运行该服务的用户无权访问此文件夹。事实并非如此,因为实际上每个人都可以访问此文件夹。
我遇到了一些线索,人们指出潜在的Kerberos Double Hop
是潜在的问题。如此处所述:https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff649317(v=pandp.10)?redirectedfrom=MSDN
可能是Kerberos,我正在进一步研究以查看是否是问题所在。但是与此同时,说Kerberos double hop
是罪魁祸首,是什么解释了此错误的偶发性?如果kerberos删除凭据,那不是会一直删除它,而不是只选择几次吗?
或者,也可以说这两个都不是导致此错误的真正原因。真正的问题不是错误本身,而是错误的非常零星的本质。可能是网络中的某些东西导致连接中断吗?
答案 0 :(得分:5)
确保SQL Server可以看到共享。我发现进行测试的一种好方法是使用xp_cmdshell对共享进行DIR。例如
exec sp_configure 'show advanced' , 1
RECONFIGURE
exec sp_configure 'xp_cmdshell' , 1
RECONFIGURE
exec xp_cmdshell 'dir \\host.domain.local\sharename'
如果偶尔出现,可能是因为DNS /网络名称解析是一个问题?确保使用FQDN。
如果与Kerberos相关,则可以通过使用托管共享的服务器的IP地址(例如exec xp_cmdshell 'dir \\10.10.10.x\sharename'
)来排除问题,当您使用IP时,身份验证必须回退到NTLM。根据服务器的安全性设置,您可能需要更改一些GPO才能使其正常工作。
答案 1 :(得分:3)
另一个原因可能是CONCURRENCY
。
网络中的另一个用户已经打开了excel文件,然后在打开文件的过程中,我们收到诸如“文件将处于只读模式”之类的消息(记不清了)。
类似地,当我们通过C#
之类的应用程序读取excel文件时,如果有很多用户同时使用同一文件,则会得到相同的错误。
我们的应用程序将此类错误转换为“ Access is denied...
”。
因此有时它可以正常工作,有时会引发错误。
因此,您可以尝试在CONCURRENT
环境中进行复制。
按照this link中的描述进行Excel更改。
答案 2 :(得分:2)
我很想知道使用xp_dirtree会说什么。我将其用于根文件夹并设置变量,以使其“足够深”以找到您的文件夹。
EXEC master.sys.xp_dirtree ‘filePath1’,0,1;
答案 3 :(得分:0)
非常感谢您抽出宝贵的时间来回复,非常感谢您的回复。
花了一些时间来获得有关此问题的更多信息。事实证明,这是<div class="display">
<img id="modelos" src="images/modelos/1.png">
<img id="logo-maior" src="images/type-logo.png" alt="TYPE logo">
<!--
<button type="button" onclick="displayPreviousImage()">Previous</button>
<button type="button" onclick="displayNextImage()">Next</button>
-->
</div>
的问题。
我们确实查看了机器日志,并在机器上找到了以下日志,这些日志与我们正面临的kerberos-double-hop
恰好一致。日志如下所示:
random errors
我们看到错误的用户名是运行Web服务并最终调用失败的存储过程的服务帐户的用户名。
因此,这将其确定为kerberos-double-hop问题。我们仍然不确定为什么只发生The delegated TGT for the user (username@domainname) has expired. A renewal was attempted and failed with error 0xc0000001. The server logon session (0x9:8748fa4a) has stopped delegating the user's credential. For future unconstrained delegation to succeed, the user needs to authenticate again to the server.
。但这仍然是kerberos-doublehop