最近,我设法使Razor解析器在.NET 3.5下工作,并由Server 2008托管。目前,这只是一个实验,看看什么是可行的。这是可行的,包括动态编译剃刀模板程序集,然后加载到AppDomain (那是个任务!)中。
因为SQLCLR不允许在任何SQLCLR托管代码中使用Assembly.Load(),即使在PERMISSION_SET = UNSAFE中也是如此。我的解决办法是在使用sp_executesql编译后直接注册程序集,我构建了CREATE ASSEMBLY语句。当我动态地呈现这些模板程序集时,我使用PERMISSION_SET = SAFE这样做,以确保它们不会在安全程序集允许的范围之外执行任何操作。
现在,棘手的部分是,这些剃须刀模板在连接用户的上下文中运行,因此它们可以访问数据库,例如,在我的模板中,我可以这样做:
@import System.Data.SqlClient
@{
using (var conn = new SqlConnection("Context Connection = true"))
{
conn.Open();
// Execute something against the database
}
}PERMISSION_SET = SAFE将允许这样做,因为这是SQLCLR存在的原因之一,但在这些模板程序集中,我想引入一些额外的安全性,以防止用户对数据库执行任何操作。
是否有人知道禁用类型(如SqlConnection或SqlCommand )的方法,比如使用代码访问安全性或其他方法?
发布于 2011-09-21 19:12:14
SqlClientPermission可以用来防止SqlConnection的使用。
https://stackoverflow.com/questions/7443765
复制相似问题