【问题标题】:OPENROWSET BULK Permissions to Shared Folder共享文件夹的 OPENROWSET BULK 权限
【发布时间】:2013-02-05 14:53:04
【问题描述】:

目标

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

错误

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

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

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

背景

请理解,我不也不会有权访问 SQL 服务器,因此我不能在那里放置文件。 p>

文件位于 Windows 7 x64 机器上。

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

问题

谁能帮助我了解我需要提供哪些其他安全措施才能允许 SQL 服务器访问此文件夹?

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2008-r2 bulk-load network-security


    【解决方案1】:

    如果您以 SQL 登录名登录,那么您必须 create a credential 进行此登录,并且此凭据必须具有足够的权限才能读取共享。

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

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

    【讨论】:

    • 好的,这就是为什么我在运行查询后在我的机器上说一个ANONYMOUS LOGON 会话! 我其实是在使用 Windows Authentication 来连接 SQL server。我将联系我的 DBA 并提出该请求。
    • +1,让我省去了很多猜测。要添加的一件事是,如果您不为 SQL 登录创建凭据,则会使用 SQL 服务的帐户,这可能不够,也可能不够。请参阅此MSDN page,它在“安全注意事项”部分中更详细地讨论了它。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      1. 安装Microsoft Access Database Engine 2016 Redistributable
      2. Configure the Service Principal Name (SPN) in Active Directory(因为我们使用 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 和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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多