Sql server 禁用在SQLCLR上运行的键入代码

Sql server 禁用在SQLCLR上运行的键入代码,sql-server,razor,sqlclr,code-access-security,Sql Server,Razor,Sqlclr,Code Access Security,最近,我设法让Razor解析器在.NET3.5下工作,并由SQLServer2008托管。目前,这只是一个实验,看看什么是可行的。这是可行的,包括动态编译razor模板程序集,然后将其加载到AppDomain中 因为SQLCLR不允许您在任何SQLCLR托管的代码中使用Assembly.Load,即使权限设置为不安全。我的解决方法是在编译后直接使用sp_executesql注册程序集,我构建了createassembly语句。当我动态呈现这些模板程序集时,我使用权限_SET=SAFE来确保它们不

最近,我设法让Razor解析器在.NET3.5下工作,并由SQLServer2008托管。目前,这只是一个实验,看看什么是可行的。这是可行的,包括动态编译razor模板程序集,然后将其加载到AppDomain中

因为SQLCLR不允许您在任何SQLCLR托管的代码中使用Assembly.Load,即使权限设置为不安全。我的解决方法是在编译后直接使用sp_executesql注册程序集,我构建了createassembly语句。当我动态呈现这些模板程序集时,我使用权限_SET=SAFE来确保它们不会做任何超出安全程序集允许范围的事情

现在棘手的部分是,这些razor模板在连接用户的上下文中运行,因此它们可以访问数据库,例如,在我的模板中,我可以执行以下操作:

PERMISSION_SET=SAFE允许这样做,因为这是SQLCLR存在的原因之一,但在这些模板程序集中,我想引入一些额外的安全性,允许我防止用户对数据库执行任何操作

有人知道使用代码访问安全性或其他方法禁用类型(如SqlConnection或SqlCommand)的方法吗?

SqlClientPermission可用于防止使用SqlConnection。

SqlClientPermission可用于防止使用SqlConnection

@import System.Data.SqlClient
@{
    using (var conn = new SqlConnection("Context Connection = true"))
    {
        conn.Open();
        // Execute something against the database
    }
}