我们在SQL Server 2000中使用了"未记录的"xp_fileexist存储过程多年,并且没有遇到任何问题.在2005年,如果执行的用户帐户不是系统管理员,它们似乎会略微修改行为以始终返回0.如果SQL Server服务在LocalSystem帐户下运行并且您尝试检查网络上的文件,它似乎也返回零.
我想摆脱xp_fileexist.有没有人有更好的方法从存储过程内部检查网络位置是否存在文件?
您必须将CLR标记为EXTERNAL_ACCESS才能访问System.IO命名空间,但是事情并非如此.
SAFE是默认权限集,但它具有高度限制性.使用SAFE设置,您只能访问本地数据库中的数据,以对该数据执行计算逻辑.EXTERNAL_ACCESS是权限层次结构中的下一步.此设置允许您访问外部资源,例如文件系统,Windows事件查看器和Web服务.SQL Server 2000及更早版本中无法进行此类资源访问.此权限集还限制了指针访问等操作,这些操作会影响程序集的健壮性.UNSAFE权限集假定完全信任程序集,因此不会产生"代码访问安全性"限制.此设置与扩展存储过程功能的方式相当 - 您假设所有代码都是安全的.然而,此设置会限制为具有sysadmin权限的用户创建不安全的程序集.Microsoft建议您尽可能避免创建不安全的程序集.