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

Rob*_*obH 6 bulkinsert sql-server-2008 windows-7

我正在开发一个将数据批量加载到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).
Run Code Online (Sandbox Code Playgroud)

我使用Windows身份验证连接到数据库,使用写入文件的同一帐户.该文件及其所在的文件夹授予对我的用户帐户和数据库服务器的域服务帐户的读取和修改权限.该服务帐户显然已经允许约束委托,这在MSDN上提到.仍然没有好处.如果我使用SQL Server帐户连接,则批量插入成功,但我们正在尝试专门用于Windows身份验证.

有没有人知道需要做些什么来使这项工作?SQL Server究竟如何访问网络共享上的数据,在其服务帐户和连接用户的服务帐户之间跳转?我知道我可以在我们当前的基础设施中以类似的情况批量插入,但是随着年龄的增长它是如此的苛刻,以至于很难找到过去已经做过的事情.

小智 5

最近,我们的许多开发人员都遇到了这个问题。我想出了许多方法来测试散装插入物。

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

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

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

GRANT ADMINISTER BULK OPERATIONS TO "domain\usergroup"
Run Code Online (Sandbox Code Playgroud)


Tom*_*ler 1

您解决过这个问题吗?我最近遇到了类似的问题,发现解决它的最佳方法是使用 SQL 登录。

最初,读完这里的注释后,我想如果我只向连接到 SQL Server 的 Windows 帐户授予读取权限就可以了,但即使我授予了读取权限Everyone,我仍然无法读取文件。

我认为原因与 SQL Server 模拟 Windows 用户并尝试访问 UNC 共享有关,这是委派,除非明确启用,否则不允许这样做。这里有一些注释可能会有所帮助。这就是你所说的受限代表团,我也无法让它工作!

底线:我只是使用了 SQL 登录并确保 SQL Server 进程帐户具有共享的读取权限(Everyone在我的情况下通过授予读取权限)并且它有效。