批量插入时操作系统错误代码 5(拒绝访问。)

Posted

技术标签:

【中文标题】批量插入时操作系统错误代码 5(拒绝访问。)【英文标题】:Operating system error code 5(Access is denied.) when bulk insert 【发布时间】:2013-02-01 14:31:45 【问题描述】:

我在服务器 A 上有一个 ASP.NET 应用程序,在服务器 B 上有一个 SQL Server。 运行应用程序时,它会调用存储过程。此过程尝试从服务器 A 上共享文件夹中的文件批量插入,但出现以下错误:

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

奇怪的是,当我直接从 sql 管理工作室执行批量插入时,它运行时没有任何异常。

另一个观察:如果我将共享文件夹地址更改为sql server运行的本地文件夹(服务器B)而不共享,则没有访问被拒绝错误...

我尝试为所有用户设置 bulkadmin 权限,包括技术用户:运行 sql 服务的 sql_serviceusr、另一个运行应用程序并调用 sql server 的技术用户以及登录到应用程序的用户.所有用户都是域帐户,所有服务器都使用 Kerberos 身份验证。

服务器 A:Windows Server 2008R2

服务器 B:Windows Server 2008R2、SQL Server 2008R2

感谢任何帮助或指导。

【问题讨论】:

它在 Management Studio 中有效但在应用程序中无效的原因可能是因为他们使用不同的帐户。我猜您使用个人凭据在 Studio 中登录 SQL,但该应用程序的帐户更受限制(应该如此)。 【参考方案1】:

您正在进行双跳,因此您需要启用 Kerberos 委派。

【讨论】:

【参考方案2】:

您可以创建一个连接帐户并使用 SQL 身份验证。

根据我的经验,让我们的网络人员正确设置 Kerberos 就像拔牙一样。我们曾经让它工作了一个光荣的一周,然后它突然停止工作。之后的麻烦就不值得了。

这可能不是您正在寻找的确切答案,但可能是您的临时解决方案。

【讨论】:

【参考方案3】:

根据您对错误的描述,我认为问题在于共享文件夹。 共享文件夹时,您应该在文件夹属性的两个位置向将从远程计算机访问该文件夹的用户授予访问权限:共享选项卡下和安全性选项卡下. 您是否都授予了访问权限?

【讨论】:

是的,我授予访问权限并共享给特定用户。但什么也没发生。

以上是关于批量插入时操作系统错误代码 5(拒绝访问。)的主要内容,如果未能解决你的问题,请参考以下文章

Azure blob 到 Azure SQL 数据库:无法批量加载,因为无法打开文件“xxxx.csv”。操作系统错误代码 5(访问被拒绝。)

系统错误 5 启动 .NET 服务时访问被拒绝

发生系统错误5。拒绝访问的解决办法

SqlServer 2014 还原数据库时提示:操作系统返回了错误5,,拒绝访问

Server 服务因下列错误而停止: 拒绝访问。

Flutter 安装:操作系统错误:访问被拒绝,errno=5