Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Когда управляемый код обращается к внешним ресурсам, SQL Server не автоматически олицетворяет текущий контекст выполнения, в котором выполняется подпрограмма. Код в EXTERNAL_ACCESS
сборках и UNSAFE
сборках может явно олицетворить текущий контекст выполнения.
Замечание
Сведения об изменениях поведения в олицетворении см. в статье "Критические изменения функций ядра СУБД" в SQL Server 2014.
Поставщик доступа к данным в процессе предоставляет интерфейс программирования приложений, SqlContext.WindowsIdentity
который можно использовать для получения маркера, связанного с текущим контекстом безопасности. Управляемый код и EXTERNAL_ACCESS
UNSAFE
сборки могут использовать этот метод для извлечения контекста и использования метода .NET Framework WindowsIdentity.Impersonate
для олицетворения этого контекста. Следующие ограничения применяются при явном олицетворения пользовательского кода:
Доступ к данным в процессе не допускается, если управляемый код находится в олицетворенного состояния. Код может отменить олицетворение, а затем вызвать доступ к данным в процессе. Обратите внимание, что для этого требуется сохранить возвращаемое значение (
WindowsImpersonationContext
объект) исходногоImpersonate
метода и вызватьUndo
этот методWindowsImpersonationContext
.Это ограничение означает, что при доступе к данным в процессе он всегда находится в контексте текущего контекста безопасности, действующего для сеанса. Его нельзя изменить явным олицетворением в управляемом коде.
Для управляемого кода, выполняющегося асинхронно (например, с помощью
UNSAFE
сборок создания потоков и асинхронного выполнения кода), доступ к данным в процессе никогда не допускается. Это верно, есть ли олицетворение.
Если код выполняется в олицетворенный контекст, отличный от SQL Server, он не может выполнять вызовы доступа к данным в процессе; Перед выполнением вызовов доступа к данным в процессе он должен отменить контекст олицетворения. При получении доступа к данным в процессе из управляемого кода исходный контекст выполнения точки входа Transact-SQL в управляемый код всегда используется для авторизации.
Оба EXTERNAL_ACCESS
сборки и UNSAFE
сборки получают доступ к ресурсам операционной системы с учетной записью службы SQL Server, если они не добровольно олицетворяют текущий контекст безопасности, как описано ранее. Из-за этого авторы EXTERNAL_ACCESS
сборок требуют более высокого уровня доверия, чем SAFE
те сборки, которые задаются разрешением EXTERNAL ACCESS
на уровень входа. Необходимо предоставить EXTERNAL ACCESS
разрешение только для входа, доверенных для выполнения кода в учетной записи службы SQL Server.
См. также
Безопасность интеграции со средой CLR
Олицетворение и учетные данные для подключений