AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 208181
Accepted
Kenneth Fisher
Kenneth Fisher
Asked: 2018-05-30 12:49:38 +0800 CST2018-05-30 12:49:38 +0800 CST 2018-05-30 12:49:38 +0800 CST

BULK INSERT 在我有权访问的文件上获取“无法批量加载,因为 ... 访问被拒绝”

  • 772

我正在尝试运行 BULK INSERT 但我收到拒绝访问错误。到目前为止,我已经尝试了以下方法:

  • 我可以从我的机器上打开文件
  • 我已使用 windows auth 登录到 SQL Server(已尝试 v2008 R2 和 v2016)
  • 我有系统管理员权限
  • 我可以type使用 xp_cmdshell 文件(使用 SQL 服务帐户,但它消除了它是防火墙的想法)
  • 路径是网络 URL 而不是本地驱动器

我正在使用的命令是这样的:

BULK INSERT ken_temp
FROM '\\network_path\temp\kdf\text_file.txt'
WITH
   (
    FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'
   ,ROWS_PER_BATCH = 50000
   ,MAXERRORS = 10
   )

有任何想法吗?

sql-server sql-server-2008-r2
  • 1 1 个回答
  • 17039 Views

1 个回答

  • Voted
  1. Best Answer
    Solomon Rutzky
    2018-05-30T18:17:55+08:002018-05-30T18:17:55+08:00

    问题是:

    1. 您正在使用 Windows 身份验证登录:这意味着 SQL Server 将尝试模拟您的 Windows / 域帐户来访问文件系统。

    2. 您已直接登录到工作站,然后远程连接到 SQL Server:这意味着您通过将身份验证令牌从工作站传递到运行 SQL Server 的服务器间接连接到运行 SQL Server 的服务器。

    3. 您尚未为 SQL Server 启用委派:这意味着您被默认行为所困扰,即不允许将该令牌传递超过直接登录的 1 步。

    4. 您正在尝试读取存在于远程资源上的文件:这意味着它超出了您直接登录的位置超过 1 步。

    这就是为什么您可以很好地从工作站访问文件的原因。这就是为什么 usingxp_cmdshell也有效的原因,因为服务帐户直接登录到运行 SQL Server 的服务器,而远程资源仅一步之遥。

    我怀疑如果您要将远程桌面直接连接到运行 SQL Server 的服务器上,在该服务器上运行 SSMS,然后执行BULK INSERT,它会成功。或者,如果您设置 SQL Server 登录,它也应该可以工作,授予登录“批量管理员”权限,EXECUTE AS Login = 'JustReadTheDangFileAlready';然后执行BULK INSERT. 当执行BULK INSERT/OPENROWSET (BULK...)作为 SQL Server 登录时,没有要模拟的 Windows 帐户,因此使用服务帐户完成文件系统访问,就像xp_cmdshell.

    您有以下选择:

    1. 为 SQL Server 启用委派(不记得是针对服务还是帐户,在这种情况下,可能是您的 Windows 帐户需要它,但有关于如何设置的指南,包括设置 SPN) . 我相信这是首选/推荐的选择。这允许进程将身份验证令牌转发到从直接登录中进一步删除的资源。

    2. 为此过程使用 SQL Server 登录。我不敢相信我在建议这个,但是如果您有一个 SQL Server 登录名,该登录名是“批量管理员”固定服务器角色或具有正确的“批量管理员”权限,那么您可以为此创建关联的用户登录(在适当的数据库中),并将 放在BULK INSERT使用WITH EXECUTE AS 'JustReadTheDangFileAlready'. 然后你可以执行那个应该掩盖请求来自 Windows 帐户的过程。

    3. 打开该远程文件(也许还有文件夹?)的权限。您可以将“读取”权限授予“所有人”(也可以授予“读取”权限或对该文件夹的其他权限)。

    4. 删除此问题并使用此“错误”作为需要通过 HBA 卡连接并显示为本地驱动器的昂贵 SAN 的理由?。只需告诉首席财务官:“这确实是唯一的方法。互联网是这么说的。”

    • 6

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve