首页 > 解决方案 > 从远程客户端执行批量插入失败,但在本地成功

问题描述

请为我的问题找到如下图表:

在此处输入图像描述

我在同一个域中有 3 台服务器,有一个 SQL Server 实例 A(它的 Windows 服务在 domain\User1 下运行),在这种情况下,我们有一个存储过程,用于从服务器中的网络共享文件夹中批量插入文本文件C、domain\User1 对该文件夹拥有完全权限。

我的问题是:存储过程在其(服务器 A)中通过 SSMS 连接时运行正常(绿色箭头)。但是当我在服务器 B 中更改为 SSMS 时它失败了(通过同一个域\User1 登录到同一个实例 A)。错误是文本文件的“访问被拒绝”(红色箭头)。客户是否在其中发挥作用?我认为客户端无关紧要,文件读取是从服务器完成的(由运行实例A服务的用户)

注意:如果我将 SSMS B 中的实例 A 与 SQL 登录用户(不是 Windows 帐户)连接起来,则存储过程可以正常工作。

谁能给我一些建议并为我的英语不好感到抱歉

标签: sql-serverssmsbulkinsertimpersonation

解决方案


这只是一个链接答案,但希望它有所帮助。

顺便说一句,我赞扬您花时间分析问题,以绘制图表。这比这里的大多数问题要高得多。

我相信您遇到了双跳问题。我到处搜索 BULK INSERT 权限模型,终于找到了这个https://dba.stackexchange.com/questions/189676/why-is-bulk-insert-considered-dangerous

这说明了使用 BULK INSERT:

通过 Windows 登录访问 SQL Server 时,将模拟该 Windows 帐户(即使您使用 EXECUTE AS LOGIN='...' 切换安全上下文)来进行文件系统访问

还有这个

通过 SQL Server 登录访问 SQL Server 时,外部访问是在 SQL Server 服务帐户的上下文中完成的

当您遇到 Windows 身份验证问题并且存在三台服务器和模拟时,通常是双跳问题。

这可能会帮助您:

https://dba.stackexchange.com/questions/44524/bulk-insert-through-network

这反过来又引用了这个:

https://thesqldude.com/2011/12/30/how-to-sql-server-bulk-insert-with-constrained-delegation-access-is-denied/


推荐阅读