2

客观的

使用 OPENROWSET 功能在针对文本文件的查询中加入数据。

错误

利用@gbn 在这个问题上的答案,我试图像 OP 一样打开一个行集;虽然文件的格式有点不同。但是,我在尝试访问共享文件夹时遇到以下错误:

消息 4861,第 16 层,状态 1,第 1 行

无法批量加载,因为无法打开文件“\MACHINENAME\Share\EC04.txt”。操作系统错误代码 5(拒绝访问。)。

背景

请理解,我没有将无法访问 SQL 服务器,因此我无法在其中放置文件。

该文件位于 Windows 7 x64 机器上。

该文件夹已与Read/Write共享Everyone

问题

有人可以帮助我了解我需要提供哪些其他安全性以允许 SQL 服务器访问此文件夹?

4

3 回答 3

9

如果您以 SQL 登录名登录,那么您必须为此登录创建一个凭据,并且此凭据必须具有足够的权限来读取共享。

如果您以 Windows 登录名登录,则必须为 SQL Server 服务帐户启用 Kerberos 约束委派。

现在,您似乎正在使用 Windows 登录,并且由于模拟上下文无法通过“双跳”,身份验证解析为 ANONYMOUS LOGON,它不是每个人的成员,因此访问被拒绝。这一切正是预期的行为。请咨询您的网络管理员,了解如何为针对您所需共享的 SQL Server 服务帐户设置约束委派。

于 2013-02-05T15:03:06.697 回答
2

我遇到了同样的问题,这是由使用 SQL DNS-Alias 引起的。使用 Servername\Instance 它工作,使用 ServerAlias\Instance 我得到Operating system error code 5(Access is denied.).

于 2015-08-24T14:24:44.407 回答
0

SQL Server 2017 需要这些步骤才能OPENROWSET ('Microsoft.ACE.OLEDB.16.0','Excel 12.0;..)使用共享文件夹(UNC 文件共享):

  1. 安装Microsoft Access 数据库引擎 2016 Redistributable
  2. 在 Active Directory 中配置服务主体名称 (SPN)(因为我们使用 Kerberos 身份验证):
    1. 配置Computer object安全权限(数据库服务器的)
    2. 配置Service account安全权限(运行 SQL-server 进程的用户)
    3. 检查 SQL Server 日志中的消息,如:SQL Server 网络接口库已成功注册 SQL Server 服务的服务主体名称 (SPN) [MSSQLSvc/SRV-DB-01.domain.local:58089]。
  3. 允许Ad Hoc Distributed Queries

EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO EXEC sp_configure 'ad hoc distributed queries', 1 RECONFIGURE GO

  1. AllowInProcess使用和配置驱动程序“Microsoft.ACE.OLEDB.16”DynamicParameters

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

  1. 因为我们启用AllowInProcess了 ,所以服务帐户实际用户必须对 Temp-Folder 具有修改权限C:\Users\service-account\AppData\Local\Temp。否则,您可能会收到提供商报告的意外灾难性故障
  2. 确保您对 UNC 共享本身具有适当的权限。
  3. 重新启动服务器以确保应用了 AD 和临时文件夹权限的所有更改!
  4. 使用实际的 Database-Server-Name 进行连接。不要使用 SQL 别名。
于 2019-07-18T13:02:43.263 回答