使用OPENROWSET功能在查询中对文本文件加入数据。
在this question上利用@gbn的答案我试图像OP一样打开一个行集;虽然文件的格式有点不同。但是,我在尝试访问共享文件夹时遇到以下错误:
Msg 4861,Level 16,State 1,Line 1
无法批量加载,因为无法打开文件“\ MACHINENAME \ Share \ EC04.txt”。操作系统错误代码5(访问被拒绝。)。
请理解,我不且不会访问SQL服务器,因此我无法将文件放在那里。
该文件驻留在Windows 7 x64计算机上。
该文件夹已与Read/Write
分享为Everyone
。
有人可以帮我理解我需要提供哪些其他安全性才能让SQL服务器访问此文件夹?
答案 0 :(得分:9)
如果您以SQL登录身份登录,那么您必须create a credential才能进行此登录,并且此凭据必须具有足够的权限才能读取共享。
如果您以Windows登录身份登录,则必须为SQL Server服务帐户启用Kerberos约束委派。
现在看起来你正在使用Windows登录,并且由于模拟的上下文无法通过“双跃点”流,因此身份验证解析为ANONYMOUS LOGON,它不是Everyone的成员,因此拒绝访问。所有这些都是预期的行为。有关如何为定义所需共享的SQL Server服务帐户设置约束委派,请咨询您的网络管理员。
答案 1 :(得分:2)
我遇到了使用SQL DNS-Alias引起的同样问题。使用Servername \ Instance,使用ServerAlias \ Instance,我得到Operating system error code 5(Access is denied.).
答案 2 :(得分:0)
在SQL Server 2017上需要执行以下步骤,以使OPENROWSET ('Microsoft.ACE.OLEDB.16.0','Excel 12.0;..)
与共享文件夹(UNC文件共享)一起使用:
Computer object
(数据库服务器的)安全权限Service account
安全权限(运行SQL Server进程的用户)Hoc Distributed Queries
EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO EXEC sp_configure 'ad hoc distributed queries', 1 RECONFIGURE GO
AllowInProcess
和DynamicParameters
配置驱动程序“ Microsoft.ACE.OLEDB.16”
USE [master] GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'AllowInProcess', 1 GO EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.16.0', N'DynamicParameters', 1 GO
AllowInProcess
,因此服务帐户和必须具有C:\Users\service-account\AppData\Local\Temp
上的临时文件夹的修改权限。否则,您可能会收到提供者报告了意外的灾难性故障。