不能打开。操作系统错误代码 1326,sql-server,file-permissions,bulkinsert,network-share"/>

首页 > 解决方案 > SQL 无法批量加载,因为文件不能打开。操作系统错误代码 1326

问题描述

我们正在尝试通过记录本地 SQL Server 帐户在 SSMS 中运行批量插入,但在运行查询时出现错误。

错误:

消息 4861,级别 16,状态 1
第 1 行无法批量加载,因为无法打开文件“\\AppserverIpAddress\SharedPath\Insert.TXT”。操作系统错误代码 1326(用户名或密码不正确。)。

询问:

BULK INSERT TABLENAME
FROM '\\AppserverIpAddress\SharedPath\Insert.TXT'
WITH 
  (
    FIELDTERMINATOR = '|',
    ROWTERMINATOR = '\n'
  );

观察:

  1. 如果我使用 Windows 身份验证(本地 Windows 服务器管理员帐户并且它具有 sysadmin 权限)登录 SSMS,则查询运行成功
  2. 使用 SQL Server 用户帐户(例如SA(默认 sysadmin 帐户)或其他 SQL Server 帐户)登录时,查询会引发错误。
  3. SQL Server 服务在本地 Windows 服务器管理员帐户 ( .\administrator)下运行
  4. 共享文件夹驻留在应用程序服务器上,对“Everyone”帐户具有完全控制权。

任何人都可以提出这种行为的可能原因吗?

标签: sql-serverfile-permissionsbulkinsertnetwork-share

解决方案


这是记录的行为:

安全帐户委派(模拟)

如果用户使用 SQL Server 登录,则使用 SQL Server 进程帐户的安全配置文件。无法在数据库引擎之外对使用 SQL Server 身份验证的登录进行身份验证。因此,当使用 SQL Server 身份验证的登录名启动 BULK INSERT 命令时,将使用 SQL Server 进程帐户(SQL Server 数据库引擎服务使用的帐户)的安全上下文建立与数据的连接。要成功读取源数据,您必须授予 SQL Server 数据库引擎使用的帐户对源数据的访问权限。相反,如果 SQL Server 用户使用 Windows 身份验证登录,则用户只能读取用户帐户可以访问的那些文件,而不管 SQL Server 进程的安全配置文件如何。

批量插入

SQL Server 服务在本地 windows 服务器管理员帐户下运行

这是一个坏主意,无论如何你都应该改变它。切换到有权访问共享的域帐户,或切换回默认虚拟帐户并授予计算机帐户的共享访问权限,例如 MyDomain\MyServer$。


推荐阅读