我有两台服务器,一台是具有webservice的应用服务器,另一台服务器是一台DB服务器,它有SQL Server 2005 DB。 Webservice是一个vb.net应用程序,所有输入文件都将在应用服务器上。当我的应用程序调用(通过webservice)数据库服务器使用Windows身份验证(集成安全性)执行带有UNC路径(应用程序服务器)的BULK插入语句时,它会失败并显示错误 -
System.Data.SqlClient.SqlException:无法批量加载,因为无法打开文件“\ Servername \ Foldername \ file1.txt”。 操作系统错误代码5(找不到错误)。 在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection) 在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection)
我在两台服务器上都是管理员,而webservice正在我的用户凭据上运行,而且我在SQL DB上运行SA。 SQL Server正在本地系统帐户上运行。我将其更改为在我的用户帐户上运行但没有运气!但是,当我在connectionstring中使用SQL身份验证时,同样的语句也可以。
任何人都可以对这个问题有所了解。
提前致谢
西
答案 0 :(得分:4)
您的客户端使用SQL Server进行身份验证,然后SQL Server模拟客户端并尝试访问UNC路径。这是代表团,并且是隐含的禁止。您必须采取明确的步骤为SQL Server服务帐户启用约束委派。请参阅此文章解释详细信息:http://msdn.microsoft.com/en-us/library/ms998355.aspx 本文展示了访问后端数据库的ASP服务的约束委派,但在您的情况下,它将是访问后端UNC共享的中间的SQL Server。
答案 1 :(得分:1)
以随机顺序排除故障的一些想法:
从Sql Server Management Studio运行批量插入时是否有效?
更改MSSQLSERVER服务运行的帐户应该有帮助,但更改凭据后是否重新启动了Sql Server?
创建一个在与Sql Server相同的用户下运行的命令shell:
runas /noprofile /user:domain\username cmd
然后看看你是否被允许阅读网络共享:
net use \\machine\share