Ссылки в средствах безопасности интеграции со средой CLR

В этом разделе описан способ обеспечения взаимного вызова в SQL Server фрагментов пользовательского кода на языке Transact-SQL или на одном из управляемых языков. Применяемые при этом связи между объектами называются ссылками.

Ссылки вызова

Ссылки вызова соответствуют вызову кода, который поступает либо от пользователя, вызывающего объект (такой как пакетное задание Transact-SQL с вызовом хранимой процедуры), либо из хранимой процедуры или функции среды CLR. Применение ссылок вызова влечет за собой выполнение проверки разрешения EXECUTE на вызываемый объект.

Ссылки доступа к таблицам

Ссылки доступа к таблицам соответствуют операциям получения или изменения значений в таблице, представлении или функции с табличным значением. Ссылки доступа к таблицам аналогичны ссылкам вызова, если не считать того, что они обеспечивают более детализированный контроль доступа в рамках разрешений SELECT, INSERT, UPDATE и DELETE.

Неконтролируемые ссылки

Неконтролируемые ссылки означают, что во время выполнения не происходит проверка разрешений в рамках связей между объектами после установления этих связей. Если между двумя объектами (например, между объектом x и объектом y) определена неконтролируемая ссылка, то разрешения на объект y и на другие объекты, к которым осуществляется доступ из объекта y, проверяются только во время создания объекта x. Во время создания объекта x разрешение REFERENCE проверяется на объекте y применительно к владельцу объекта x. А во время выполнения (например, при вызове кем-то объекта x) разрешения на объект y или другие объекты, на которые в нем заданы статические ссылки, не проверяются. Во время выполнения проверяется соответствующее разрешение в отношении самого объекта x.

Неконтролируемые ссылки всегда используются совместно с зависимостью метаданных между двумя объектами. Эта зависимость метаданных представляет собой связь, устанавливаемую в каталогах SQL Server, которая предотвращает удаление объекта, если от него зависит другой объект.

Неконтролируемые ссылки полезны, если назначение разрешений нескольким зависимым объектам невыполнимо или неудобно. Появились неконтролируемые ссылки между объектами, которые определяют точки входа Transact-SQL в сборки CLR (например, процедуры, триггеры, функции, типы и агрегаты) и сборки, в которых они определены. Исходя из того что требования безопасности по отношению к этим объектам не контролируется следует, что для вызова точки входа Transact-SQL, определенной в сборке CLR, вызывающему объекту требуется только соответствующее разрешение на эту точку входа Transact-SQL. Вызывающему объекту не требуются разрешения на эту сборку или другие сборки, на которые имеются статические ссылки. Разрешения на сборку проверяются во время создания точки входа Transact-SQL.

Безопасность SQL Server, основанная на авторизации

Далее перечислены основные правила, лежащие в основе проверок безопасности SQL Server для вызовов объектов базы данных в среде CLR и взаимных вызовов таких объектов; первые три правила определяют, какие разрешения проверяются и по отношению к каким объектам; четвертое правило определяет, для какого контекста выполнения проверяется разрешение.

  1. Для всех вызовов требуется разрешение EXECUTE, если только вызовы не происходят в одном и том же объекте; это означает, что вызовы внутри одной и той же сборки не требуют проверок разрешений. Разрешение проверяется во время выполнения.

  2. Для неконтролируемых ссылок требуется разрешение REFERENCE по отношению к вызываемому объекту при создании вызывающего объекта. Разрешение проверяется для владельца вызывающего объекта при создании объекта.

  3. Для ссылок доступа к таблицам требуются соответствующие разрешения SELECT, INSERT, UPDATE или DELETE на таблицу или представление, к которому осуществляется доступ.

  4. Это разрешение проверяется применительно к текущему контексту выполнения. Процедуры и функции могут быть созданы с контекстом выполнения, отличным от такового для вызывающего объекта. Сборки всегда создаются с контекстом выполнения процедуры, функции или триггера, по отношению к которому определен этот объект.

См. также

Основные понятия

Безопасность интеграции со средой CLR