【问题标题】:Bulk Insert failed when executed from remote client but success on local从远程客户端执行批量插入失败,但在本地成功
【发布时间】:2020-10-10 08:14:46
【问题描述】:

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

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

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

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

谁能给我一些建议,对不起我的英语不好

【问题讨论】:

  • 嗨!您需要在域下的共享文件夹中添加 user1。访问被拒绝只是为了网络安全。在此解决方案中,您只需添加用户 user1。我试过了。
  • @Amirhossein:我已经授予 domain\User1 共享文件夹的读/写权限。但它只有在我从 SSMS A 调用时才有效。我已尝试通过 domain\User1 登录服务器 B 并可以访问该共享文件夹。顺便说一句,为这个文件夹授予所有人仍然不起作用。

标签: sql-server ssms bulkinsert impersonation


【解决方案1】:

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

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

我相信您遇到了双跳问题。我到处搜索 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/

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2017-07-12
    • 2018-05-25
    相关资源
    最近更新 更多