2011-09-16 14 views
2

最近我設法使用了.NET 3.5下的SQL Server 2008託管的Razor解析器。此刻,它實際上只是一個實驗,以查看哪些可行。這是行得通的,包括動態編譯剃刀模板程序集,然後將其加載到AppDomain中(that was a mission!)。禁用在SQLCLR上運行的代碼的輸入

由於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甚至存在的原因之一,但在這些模板程序集中,我想介紹一些額外的安全性,這將允許我阻止用戶對數據庫執行任何操作。

有沒有人知道一種方法來禁用類型,如SqlConnectionSqlCommand,也許使用代碼訪問安全性或其他方法?

回答

0

SqlClientPermission可用於防止使用SqlConnection

相關問題