使用 Windows 身份验证从网络共享批量插入 SQL Server 需要哪些权限?

2024-04-15

我正在开发一个将数据批量加载到 SQL Server 2008 数据库中的应用程序。它将 CSV 文件写入网络共享,然后调用包含 BULK INSERT 命令的存储过程。

我正在将应用程序迁移到一个全新的网络。在这个新世界中,批量插入失败并出现以下错误:

Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "\\myserver\share\subfolder\filename" could not be opened. Operating system error code 5(failed to retrieve text for this error. Reason: 15105).

我使用 Windows 身份验证连接到数据库,使用的帐户与写入文件的帐户相同。该文件及其所在的文件夹向我的用户帐户和数据库服务器的域服务帐户授予读取和修改权限。该服务帐户显然已限制允许的委派,这在MSDN http://msdn.microsoft.com/en-us/library/ms188365.aspx。还是不行。如果我使用 SQL Server 帐户进行连接,则批量插入会成功,但我们尝试仅使用 Windows 身份验证。

有人知道需要做什么才能使这项工作成功吗? SQL Server 究竟如何访问网络共享上的数据,在其服务帐户和连接用户的服务帐户之间跳转?我知道我可以在我们当前的基础设施中批量插入类似的情况,但随着时间的推移,它变得如此粗糙,以至于很难追踪过去为实现这一点所做的事情。


最近,我们的一些开发人员遇到了这个问题。我想出了多种方法来测试批量插入。

我们首选使用 SQL 服务帐户。我们将 SQL 服务器和 SQL 代理设置为作为服务帐户运行,然后允许开发人员触发代理作业。服务帐户已被授予 UNC 共享的权限,并且这一切都正常运行。请注意,服务帐户始终可以正常运行这些代理作业(假设设置了 UNC 权限)。尝试测试的开发人员将会遇到这些问题。

另一种方法是在 SQL Server 本身上创建共享并将批量插入路径指向本地目录。这些错误似乎仅在访问 UNC 路径时发生。无论UNC路径是否具有允许您访问的正确权限。例如我们创建C:\test\作为 SQL Server 本身上的一个文件夹,并允许开发人员将测试文件拖放到那里。然后通过批量插入命令调用它们。

可能需要针对 master 运行命令以允许 SQL 登录组权限进行批量插入。如下所示。

GRANT ADMINISTER BULK OPERATIONS TO "domain\usergroup"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Windows 身份验证从网络共享批量插入 SQL Server 需要哪些权限? 的相关文章

随机推荐