日期:2014-05-17  浏览次数:20511 次

求大神解决!!! 急切~ 关于SQL Server访问远程文件的权限问题~
使用VS2008写一个小程序将本地音频文件保存到另一台机子上的远程服务器上,使用CDatabase类中的ExcuteSQL()方法来执行SQL语句, 
一、远程数据库中TestTable的类型分别为varchar(50),varchar(50),varbinary(MAX)

二、SQL语句为:

   SELECT INTO TestTable(SoundID, SoundName, SondFileSourcer) select '10', 'You are my world.wav', BulkColumn FROM OPENROWSET(Bulk '\\Jason-PC\SoundFiles\You are my world.wav',SINGLE_BLOB) AS BLOB

    当数据库访问的是远程服务器的话,则openrowset中指定的文件路径需要使用UNC命名规则,所以我将本地文件夹已经共享,远程的计算机对该文件是完全控制的,然后需要执行之后将该文件保存到远程服务器上。。。
    可是执行的时候SQL会报错

    “执行SQL语句出错!!!
     由于无法打开文件“\\Jason-PC\SoundFiles\You are my world.wav”,无法进行大容量加载。操作系统错误代码为5(拒绝访问。)”

      应该是权限问题吧,可是我已经将本地的文件夹共享,服务器所在主机能够访问我的文件。所以我怀疑有可能是SQL的登陆账户并没有访问本机文件的权限造成的吧。。。在网上找了好多遍了,没找到合适的解决办法,求助啊!!!!

     还有没有向SQL Server远程服务器里保存较大的二进制文件的方法啊!文件大小限制在30M+
------最佳解决方案--------------------
1、你的应用程序是否有权限访问?
2、检查SQLServer服务所用的账号是否有权限访问\\Jason-PC\SoundFiles\You are my world.wav
3、文件大小大于1M的文件,如果是2008,可以考虑使用FILESTREAM
------其他解决方案--------------------
我建议 在服务器端 查看启动SQL Server服务的账号
确保这个账号有权限访问本地

------其他解决方案--------------------
执行的时候是以SQL Server Service的账户访问\\Jason-PC\SoundFiles\You are my world.wav
所以你要确保你的SQL Server Servcie账户有完全访问共享文件夹的权限(共享文件夹中添加SQL Server Servcie的账户,然后给FULL CONTROL)。
------其他解决方案--------------------
确保SQL服务帐号有读取权限呀
------其他解决方案--------------------
引用:
确保SQL服务帐号有读取权限呀


恩,可是如何设置SQL账号的这个权限呢? 我对SQL Server 不是太熟悉,求指导~
------其他解决方案--------------------
引用:
1、你的应用程序是否有权限访问?
2、检查SQLServer服务所用的账号是否有权限访问\\Jason-PC\SoundFiles\You are my world.wav
3、文件大小大于1M的文件,如果是2008,可以考虑使用FILESTREAM


很感谢你哦~ 
关于第一点,就是现在只是让服务器端执行SQL语句,然后使得服务器端将本地端的文件读入,所以不知您说的这个权限指的是哪个~~~ 
第二点,我本人也觉得应该是这个原因,不过我对SQL Server不太熟悉,不清楚怎么设置当前登录账号权限,让他可以访问网络中的共享文件;
第三点,我用的是SQL Server2005,不清楚他有支持FILESTRAM吗? 

有没有相关的资料或者网页给我说下,我可以学习下~  
------其他解决方案--------------------
文件 太大了。
------其他解决方案--------------------
引用:
文件 太大了。


那对于大文件,想存放到服务器怎么办呢?我现在用ADO的方式使用AppendChunck方法将文件保存到SQL Server服务器上的。。。
------其他解决方案--------------------
引用:
我建议 在服务器端 查看启动SQL Server服务的账号
确保这个账号有权限访问本地


恩,确实是,我就是不清除具体到哪一步,我自己猜测应该是、SQL Server的登陆账户并没有访问远程共享文件夹的权限,但是不清楚该肿么设置权限以便让该账户能够访问共享文件夹。。。
俺菜鸟一个。。。
------其他解决方案--------------------
操作系统用的是 windows2003 server 吗?
一般来说 windows2003 对远程上传的文件都默认控制在 200K 需要修改
windows\system32\inesrv\下的 metabase.xml 文件
找到
ASPMaxRequestEntityAllowed   把他修改为需要的值,默认为204800,即200K  
AspBufferingLimit            默认值为4194...