Недавно мне удалось заставить парсер Razor работать под .NET 3.5 и размещаться на SQL Server 2008. На данный момент это всего лишь эксперимент, чтобы увидеть, что выполнимо.Это работает, включая динамическую компиляцию шаблонных сборок бритвы, которые затем загружаются в домен приложений (, который был миссией! ).
Поскольку SQLCLR не позволяет вам использовать Assembly.Load () в любом размещенном в SQLCLR коде, даже с 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
, возможно, с использованием Code Access Security или другого метода?