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


Ссылки в средствах безопасности интеграции со средой 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, которая предотвращает удаление объекта, пока от него зависит другой объект.

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

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

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

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

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

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

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

См. также

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