从远程客户端执行时批量插入失败但在本地成功

Bulk Insert failed when executed from remote client but success on local

请为我的问题找到下图:

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

我的问题是:在其(服务器 A)中通过 SSMS 连接时,存储过程 运行正常(绿色箭头)。但是当我在服务器 B 中更改为 SSMS 时失败了(通过相同的 domain\User1 登录到相同的实例 A)。错误是 "Access denied" 到文本文件(红色箭头)。客户在这方面有作用吗?我认为客户端无所谓,文件读取是从服务器完成的(由运行实例A服务的用户)

注意:如果我使用 SQL 登录用户(而不是 windows 帐户)从 SSMS B 连接实例 A,存储过程工作正常。

谁能给我一些建议,抱歉我的英语不好

这只是一个 link 的答案,但希望它能有所帮助。

顺便说一句,我赞扬你花时间分析这个问题,甚至画了一张图。这比这里的大多数问题质量高得多。

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

这是关于使用 BULK INSERT 的说明:

When accessing SQL Server via a Windows Login, that Windows account will be impersonated (even if you switch the security context using EXECUTE AS LOGIN='...') for doing the file system access

还有这个

when accessing SQL Server via a SQL Server Login, then the external access is done in the context of the SQL Server service account

当您遇到 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/