Поделиться через


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

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

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

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

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

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

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

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

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

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

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

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

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

См. также:

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