sql-server - 从远程客户端执行批量插入失败,但在本地成功
问题描述
请为我的问题找到如下图表:
我在同一个域中有 3 台服务器,有一个 SQL Server 实例 A(它的 Windows 服务在 domain\User1 下运行),在这种情况下,我们有一个存储过程,用于从服务器中的网络共享文件夹中批量插入文本文件C、domain\User1 对该文件夹拥有完全权限。
我的问题是:存储过程在其(服务器 A)中通过 SSMS 连接时运行正常(绿色箭头)。但是当我在服务器 B 中更改为 SSMS 时它失败了(通过同一个域\User1 登录到同一个实例 A)。错误是文本文件的“访问被拒绝”(红色箭头)。客户是否在其中发挥作用?我认为客户端无关紧要,文件读取是从服务器完成的(由运行实例A服务的用户)
注意:如果我将 SSMS B 中的实例 A 与 SQL 登录用户(不是 Windows 帐户)连接起来,则存储过程可以正常工作。
谁能给我一些建议并为我的英语不好感到抱歉
解决方案
这只是一个链接答案,但希望它有所帮助。
顺便说一句,我赞扬您花时间分析问题,以绘制图表。这比这里的大多数问题要高得多。
我相信您遇到了双跳问题。我到处搜索 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
这反过来又引用了这个:
推荐阅读
- python - 如何使用正则表达式在字符串中重复多次的模式
- c++ - 如果你有两个同名的函数(重载),并且有一个转换构造函数,会调用转换构造函数吗?
- c# - 有没有办法通过在 c# 中结束子字符串来对字符串列表进行排序?
- python-3.x - 如何在 tkinter 的单个应用程序窗口中打开子框架?
- java - 如何在 GitHub 中调用 API
- if-statement - 我可以使用什么公式或方法从使用表格的范围内的值中减去金额
- machine-learning - 当梯度下降算法已经处于局部最小值时它如何工作
- r - R:图书馆(闪亮)与图书馆(DT):创建
对于 Plot 上的不同颜色 - java - 是否可以通过 Twilio 可编程 API 将日历文件 (.ics) 作为 MMS 的一部分发送?
- c - 你能解释一下这段代码发生了什么吗?