Отключить Введите код, работающий на SQLCLR - PullRequest
2 голосов
/ 16 сентября 2011

Недавно мне удалось заставить парсер 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 или другого метода?

1 Ответ

0 голосов
/ 21 сентября 2011

SqlClientPermission может использоваться для предотвращения использования SqlConnection.

...