在SQL 2005中使用WITH PERMISSION_SET = UNSAFE是不是很糟糕?

cho*_*bo2 4 .net c# sql-server sql-server-2005 sqlclr

我需要使用CLR来创建一个使用.net 3.5中的东西的存储过程.如果我没有把Permission_Set = UnSafe我做不到它会死,然后给我这个错误

部署错误SQL01268:.Net SqlClient数据提供程序:消息6503,级别16,状态12,行1程序集'system.core,版本= 3.5.0.0,culture = neutral,publickeytoken = b77a5c561934e089.' 在SQL目录中找不到.批处理执行时发生错误.

所以我找到了这篇文章

http://weblogs.asp.net/paulomorgado/archive/2009/06/13/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx

最后一行说明了这一点

"现在DBA肯定不会让我使用它,但构建它很有趣." 我不确定他是否指的是设置为不安全的权限.

如果你这样做,会发生一些巨大的漏洞吗?

Chr*_*ver 5

有三种不同的permission_set选项可以限制程序集的功能

SAFE - 将程序集限制为托管代码

EXTERNAL_ACCESS - 允许访问文件,网络资源等.

UNSAFE - 不受限制的访问 - 包括执行非托管代码

MSDN文档提供以下指导

通过指定UNSAFE,可以使程序集中的代码完全自由地在SQL Server进程空间中执行可能会损害SQL Server健壮性的操作.UNSAFE程序集还可能破坏SQL Server或公共语言运行库的安全系统.UNSAFE权限只应授予高度可信的程序集.

如果你的程序集只使用.NET 3.5的功能,我不明白为什么它需要UNSAFE访问.

您可能正在使用System.Core库中不允许的类型或成员之一.微软有这些列表.System.Core.dll中不允许的类型和成员

这里有更多信息.主机保护属性和CLR集成编程