我工作的一个应用程序,批量数据加载到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 。 仍然没有好。 如果我连接使用SQL Server的帐户,然后批量插入成功,但我们正在努力坚持纯Windows身份验证。
是否有人有需要做的,使这项工作有什么处理? 究竟怎样的SQL Server去在网络共享访问数据,其服务的帐号和所连接的用户之间的跳跃? 我知道我可以在我们现有的基础设施类似的情况批量插入,但它是那么这些混沌随着年龄的增长,这将是很难追查做了什么,在过去启用它。
最近,我们有这个问题了一些我们的开发人员的。 我想出了一些办法让批量插入的测试。
我们的优先选择是使用SQL服务帐户。 我们设置SQL Server和SQL代理作为服务帐户运行,然后允许开发者来触发代理作业。 服务帐户被授予权限的UNC共享而这一切正确运作。 需要注意的是该服务帐户将始终被罚款运行这些代理作业(假设UNC权限设置)。 这是离散事件试图测试会遇到这些问题。
另一种方法是创建SQL Server本身上的共享,并在本地目录指向批量插入路径。 这些错误似乎访问UNC路径时才会发生。 不管UNC路径是否具有正确的权限,允许你访问。 例如,我们创建C:\test\
作为SQL服务器本身和权限的文件夹它允许开发到有跌落测试文件。 这些然后通过大容量插入命令调用。
的命令可能需要针对主机上运行以允许SQL登录组权限到大容量插入。 这是如下。
GRANT ADMINISTER BULK OPERATIONS TO "domain\usergroup"
亚当萨克斯顿的博客(约Kerberos和从每股批量插入)应阅读: http://blogs.msdn.com/b/psssql/archive/2012/09/07/bulk-insert-and-kerberos.aspx 。 亚当提供了两种方法:打开机器约束委派(而不是在SQLSERVR.EXE启动)帐户,或者使用SQL Server登录。 亚当提到了另外两种方法(他不推荐)。
顺便说一句,在OP的消息后一半“(检索不到该错误原因文本:15105)”可能与缺乏内SQL Server的“配置Windows服务帐户和权限”主题文件权限的SQL Server启动帐户,如SeAssignPrimaryTokenPrivilege。
你有没有解决这个问题? 我最近有一个类似的问题,发现最好的方式来解决这个问题是使用SQL登录。
最初,看了笔记这里我想如果我只是授予读取权限与我连接到SQL Server会好起来的Windows帐户,但即使我授予读取访问Everyone
,我仍然无法读入文件。
我认为原因是什么做与SQL Server冒充Windows用户并试图访问UNC共享,这是代表团这是不允许的,除非明确启用。 还有一些注意事项这里可以提供帮助。 这是约束委派,其中你说, 我无法得到它的工作之一!
底线:我只是使用了SQL登录,并确保SQL Server进程帐户已经在共享的读取权限(通过授予读取Everyone
在我的情况)和它的工作。
为了批量插入与AD用户,SQL服务它自身必须要运行的域用户并拥有必须能够委派认证AD权限。 同样的,如果你想与广告的用户运行的链接服务器。 这里是链接,AD和链接的服务器,但权限是相同的。
链接服务器和Active Directory
- 服务器必须具有由域管理员注册的SPN。
- 在其下运行SQL Server的帐户必须被信任作为委派。
- 服务器必须使用TCP / IP或命名管道网络连接。
文章来源: What permissions are required to bulk insert in SQL Server from a network share with Windows authentication?