无法批量加载.操作系统错误代码5(访问被拒绝.)

Kil*_*awr 26 t-sql sql-server bulkinsert

出于某种奇怪的原因,我在执行批量插入时遇到问题.

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

读完这篇文章后我有信心我正确设置了我的用户角色,因为它说明了......

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

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

Windows身份验证http://iforce.co.nz/i/daaqcasj.vo1.png

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

bulkadmin http://iforce.co.nz/i/bou0uklk.wdj.png

但就我所知,即使我已经正确设置了一切,我仍然会收到错误.直接从SQL Server Management Studio执行批量插入.

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

这是没有意义的,因为显然bulkadmins可以运行声明,我是否打算重新配置如何bulkadmin工作?(我迷路了)关于如何修复它的任何想法?

ant*_*tew 21

使用SQL Server身份验证时,将显示此错误,并且不允许SQL Server访问批量装入文件夹.

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

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

  • necro,但有官方文档,可能更容易:https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-file-system-permissions-for-database-engine-访问 - 基本上,添加NT SERVICE\MSSQLSERVER用户 (3认同)
  • @AlbatrossCafe 是的批量加载文件夹只是意味着您要批量插入的文件所在的文件夹。对我来说,为名为 SERVICE 的用户添加文件夹权限是有效的。 (2认同)

Aar*_*and 12

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

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

    一个.将SQL Server服务设置为以您的身份运行.
    湾 授予SQL Server服务帐户对该文件夹的显式访问权限.
    C.将文件放在SQL Server可以访问的更合理的位置,或者可以使其具有访问权限(例如C:\bulk\).

我建议假设这是一个包含的本地工作站.当我们谈论生产机器时,对SQL Server的本地文件系统访问肯定存在更严重的安全问题,当然这仍然可以通过使用c.上面的方式大大减轻- 并且只允许服务帐户访问您想要它的文件夹能够触摸.


小智 8

  1. 转到start run=>services.msc=>SQL SERVER(MSSQLSERVER)停止服务
  2. 右键单击 SQL SERVER(MSSQLSERVER)=> 属性=> 登录选项卡=> 本地系统帐户=> 确定
  3. 重新启动 SQL Server Management Studio。


小智 5

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


小智 2

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

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

你的问题已经解决了。