33

由于某些奇怪的原因,我在执行批量插入时遇到问题。

BULK INSERT customer_stg
FROM 'C:\Users\Michael\workspace\pydb\data\andrew.out.txt'
WITH
(
    FIRSTROW=0,
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
)

读完这篇文章后,我确信我已经正确设置了我的用户角色,因为它指出......

bulkadmin 固定服务器角色的成员可以运行 BULK INSERT 语句。

我已Login Properties正确设置 Windows 身份验证(如下所示).. 授予服务器范围的权限bulkadmin

窗户认证
(来源:iforce.co.nz

并且命令EXEC sp_helpsrvrolemember 'bulkadmin'告诉我上面的信息是成功的,当前用户Michael-PC\Michaelbulkadmin权限。

批量管理员
(来源:iforce.co.nz

但即使据我所知,我已经正确设置了所有内容,但我仍然收到错误消息。直接从 SQL Server Management Studio 执行批量插入。

消息 4861,级别 16,状态 1,第 2 行
无法批量加载,因为无法打开文件“C:\Users\Michael\workspace\pydb\data\andrew.out.txt”。操作系统错误代码 5(拒绝访问。)。

这没有意义,因为显然bulkadmins可以运行该语句,我是否打算重新配置其bulkadmin工作方式?(我很迷茫)。关于如何解决它的任何想法?

4

12 回答 12

25

当您使用 SQL Server 身份验证并且不允许 SQL Server 访问批量加载文件夹时,会出现此错误。

因此,让 SQL Server 访问该文件夹将解决该问题。 在此处输入图像描述

操作方法如下:转到文件夹右键单击->属性->安全选项卡->编辑->添加(在新窗口上)->高级->立即查找。在搜索结果的用户列表下,找到类似 SQLServerMSSQLUser$UserName$SQLExpress 的内容,然后单击确定,以打开所有对话框。

于 2014-08-26T14:50:36.623 回答
13

我不认为重新安装 SQL Server 会解决这个问题,它只会消磨一些时间。

  1. 确认您的用户帐户对相关文件夹具有读取权限。
  2. 使用Process Monitor之类的工具来查看实际尝试访问文件的用户。
  3. 我的猜测是,它不是Michael-PC\Michael试图访问该文件,而是 SQL Server 服务帐户。如果是这种情况,那么您至少有三个选项(但可能还有其他选项):

    一种。将 SQL Server 服务设置为随您运行。
    湾。授予 SQL Server 服务帐户对该文件夹的显式访问权限。
    C。将文件放在更符合逻辑的地方,SQL Server 可以访问或可以访问(例如C:\bulk\)。

我建议这些东西,假设这是一个包含的本地工作站。当我们谈论生产机器时,从 SQL Server 访问本地文件系统肯定存在更严重的安全问题,当然这仍然可以通过使用c.上述方法在很大程度上得到缓解 - 并且只允许服务帐户访问您想要的文件夹能够触摸。

于 2013-01-28T05:33:09.143 回答
5

我在 SSIS 2012 遇到了同样的问题,解决方案是使用 Windows 身份验证。我正在对 sa 用户使用 SQL 身份验证。

于 2013-08-20T11:28:22.637 回答
4

尝试为“MSSQLSERVER”用户(或 SQL Server 服务设置为在Windows 服务中登录为的任何用户)授予包含 CSV 和格式文件读取权限的文件夹

于 2015-01-20T18:19:54.850 回答
4
  1. 转到开始运行=>services.msc=>SQL SERVER(MSSQLSERVER) 停止服务
  2. 右键单击 SQL SERVER(MSSQLSERVER)=>属性=>登录选项卡=>本地系统帐户=>确定
  3. 重新启动 SQL Server Management Studio。
于 2018-10-20T18:05:55.547 回答
3

这对我有用:

使用 Windows 身份验证登录 SSIS。

1、打开服务,找到MSSQL NT服务账户名并复制:

在此处输入图像描述

2.打开 SQL Server 应该从中读取的文件夹。安全 - 组或用户名选项卡 - 添加并粘贴复制的帐户:**

在此处输入图像描述

  1. 您可能会收到“发现多个名称错误”,只需选择 MSSQL 用户:

在此处输入图像描述

您的BULK INSERT查询现在应该可以正常运行了。如果问题仍然存在,请尝试以相同方式将 SQL Server 代理帐户添加到文件夹权限。确保在完成后重新启动服务中的 MSSQL 服务器。

于 2020-01-14T14:41:31.887 回答
2

有时这可能是虚假的错误消息,尝试使用与运行进程相同的帐户打开文件。我在我的环境中遇到了同样的问题,当我打开文件(使用相同的凭据运行进程)时,它说它必须与已知程序相关联,在我这样做之后我能够打开它并运行过程没有任何错误。

于 2015-04-24T16:10:49.653 回答
2

确保您使用的文件 ( 'C:\Users\Michael\workspace\pydb\data\andrew.out.txt') 位于 SQL 服务器计算机上,而不是运行 MSSMS 的客户端计算机上。

于 2017-07-10T10:12:18.083 回答
1

1) 打开 SQL 2) 在任务管理器中,您可以检查哪个帐户正在运行 SQL - 它可能不是 Jan 所写的 Michael-PC\Michael。

运行 SQL 的帐户需要访问共享文件夹。

于 2018-09-25T06:23:32.500 回答
1

当我在 SSMS 中执行批量插入时,我遇到了类似的问题,但它在将任务转换为 SQL Server 代理时失败并返回“操作系统故障代码 5”。

在浏览了之前发布的大量解决方案之后,这种方式通过授予 NT SERVER/SQLSERVERAGENT 对源文件夹的“完全控制”访问权限来解决我的问题。希望它能给那些仍在为错误消息而苦苦挣扎的人带来一些启发.

于 2018-11-09T06:10:46.397 回答
1

在我们的例子中,它最终成为了一个 Kerberos 问题。我按照本文中的步骤解决了该问题:https ://techcommunity.microsoft.com/t5/SQL-Server-Support/Bulk-Insert-and-Kerberos/ba-p/317304 。

它归结为在运行 BULK INSERT 语句的 SQL Server 的计算机帐户上配置委派。机器帐户需要能够通过“cifs”服务委托给文件所在的文件服务器。如果您使用的是约束委派,请确保指定“使用任何身份验证协议”。

如果涉及 DFS,您可以执行以下 Powershell 命令来获取文件服务器的名称:

Get-DfsnFolderTarget -Path "\\dfsnamespace\share"
于 2019-04-17T13:15:40.800 回答
1

这是我解决此问题的方法非常简单:

  1. 打开 SQL Server
  2. 右键单击数据库(要备份)
  3. 选择属性
  4. 选择权限
  5. 选择您的数据库角色(本地或云)
  6. 在你的底部,你会看到明确的权限表
  7. 找到“备份数据库”权限并单击授予权限。

你的问题解决了。

于 2020-07-22T14:44:18.373 回答