首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

Sql Server CLR函数 可以访问本地文件,却不能访问web共享文件.解决办法

2013-11-29 
Sql Server CLR函数 可以访问本地文件,却不能访问web共享文件.今天自己写了个CLR函数,函数如下:[SqlFuncti

Sql Server CLR函数 可以访问本地文件,却不能访问web共享文件.
今天自己写了个CLR函数,函数如下:

  [SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)]
        public static SqlBoolean IsFileExists(SqlString source)
        {
            return (SqlBoolean)File.Exists(source.Value);
        }

部署到数据库后,不能识别网络共享的文件,但在远程桌面资源管理器中能打开,估计是和共享用户有关,有人知道原因吗?
例如:
--结果存在
select dbo.IsFileExists('d:\Tulips.jpg')

--结果为0,但在资源管理器中能打开图片
select dbo.IsFileExists('\\tas\WBLUE\Common\DevPortal_LocalizationPage.jpg')

另外再问下,我用用户名A登陆数据库,数据库中自定义函数再访问共享文件时,所使用用户是否是当前登陆者呢?
拜托高手了。 Web clr SQL?Server 数据库 网络
[解决办法]
CLR函数没有写过,但是SSIS模块中中,如果要读取文件或者文件夹,是会有权限要求的,文件的读取权限是SQL的登录者。我猜测,你这里可能也是同样的情况。
[解决办法]
确认你运行SQL Server服务的账号
拥有这个网络共享目录的权限
[解决办法]
第二个问题
只要的你权限设置是当前上下文
就能够以账户A的身份访问
[解决办法]
TSQL本身即能判断文件是否存在,不必用CLR吧.

exec master.dbo.xp_fileexist '[文件名]'

[解决办法]
sql语句里对文件的访问权限,来自于你的sql server服务启动账户,
如果这个启动账户没有网络权限,那么肯定是访问不了文件的。

热点排行