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


Ссылки на безопасность интеграции CLR

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

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

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

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

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

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

Безопасность Authorization-Based SQL Server

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

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

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

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

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

См. также

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