Aracılığıyla paylaş


SqlContext nesne

Bir ortak dil çalışma zamanı (clr) kullanıcı tanımlı tür üzerinde yöntem çağırdığınızda bir yordam veya işlev çağrısı veya zaman sunucuda yönetilen kod çağırmak sizin eylem birinde tanımlanan bir tetiği harekete Microsoft ..NET Framework dil.Kullanıcı bağlantısının bir parçası olarak bu kod yürütülmesine istediğinden arayan bağlamında Server'da çalışan kod erişimi gereklidir.Buna ek olarak, belirli veri erişim işlemleri yalnızca arayan bağlamında çalıştırılmasına geçerli olabilir.Örneğin, tetikleyici işlemlerinde kullanılan eklenen ve silinen pseudo-tables erişimi yalnızca arayan bağlamında geçerli olur.

Çağıranın bağlamı içinde abstracted bir SqlContext nesne.Hakkında daha fazla bilgi için SqlTriggerContext yöntem ve özelliklerini görmek Microsoft.SqlServer.Server.SqlTriggerContext sınıf başvuru belgelerinde .NET Framework sdk.

SqlContextAşağıdaki bileşenleri erişim sağlar:

  • SqlPipe: SqlPipe Nesnesini temsil eden "boru" hangi sonuçlar akmasını aracılığıyla istemci.Hakkında daha fazla bilgi için SqlPipe , nesne Bkz: SqlPipe nesne.

  • SqlTriggerContext: SqlTriggerContext Nesne yalnızca alınan gelen içinde CLR tetikleyicisi.Tetikleyicisi ateşlenmesine neden olan işlemi ve güncelleştirilmiş sütunları Haritası hakkında bilgi sağlar.Hakkında daha fazla bilgi için SqlTriggerContext , nesne Bkz: SqlTriggerContext nesne.

  • IsAvailable: IsAvailable özellik kullanılır belirlemek bağlam kullanılabilirliği.

  • WindowsIdentity: WindowsIdentity özellik Windows kimliğini almak için kullanılırarayanın.

Bağlam kullanılabilirliği belirleniyor

Sorgu SqlContext şu anda yürütülen kod çalışıyorsa görmek için sınıf-işlem.Bunu yapmak için kontrol IsAvailable özellik SqlContext nesne.The IsAvailable property is read-only, and returns True if the calling code is running inside SQL Server and if other SqlContext members can be accessed.If the IsAvailable property returns False, all the other SqlContext members throw an InvalidOperationException, if used.If IsAvailable returns False, any attempt to open a connection object that has "context connection=true" in the connection string fails.

Windows kimlik alınıyor

clr içinde kod yürütme SQL Server her zaman çağrılan bağlamında işlem hesabı.Kod yerine arayan kullanıcı kimliğini kullanarak belirli eylemleri gerçekleştirmesi gereken, SQL Server kimlik, kimliğe bürünme belirteci aracılığıyla alınması ardından işlem WindowsIdentity özellik SqlContext nesne.The WindowsIdentity property returns a WindowsIdentity instance representing the Microsoft Windows identity of the caller, or null if the client was authenticated using SQL Server Authentication.Yalnızca derleme ile işaretli EXTERNAL_ACCESS veya UNSAFE erişim izinleri bu özellik.

Alma sonra WindowsIdentity nesnesini çağıran istemci hesabı taklit ve kendi adınıza eylemleri gerçekleştirmek

Arayan kimliği yalnızca aracılığıyla kullanılabilir SqlContext.WindowsIdentity , saklı yordam veya işlev yürütülmesini başlatan istemci bağlı sunucu kullanarak Windows kimlik doğrulaması.If SQL Server Authentication was used instead, this property is null and the code is unable to impersonate the caller.Kimliğe bürünme örnek CodePlex üzerinde nasıl temsil kullanılacağını gösterir; Bkz: sql Server veritabanı altyapısı örneklerini için daha fazla bilgi.

Örnek

Aşağıdaki örnek arama Windows kimliğini almak nasıl gösterir istemci ve taklit istemci.

C#

[Microsoft.SqlServer.Server.SqlProcedure]
public static void WindowsIDTestProc()
{
    WindowsIdentity clientId = null;
    WindowsImpersonationContext impersonatedUser = null;

    // Get the client ID.
    clientId = SqlContext.WindowsIdentity;

    // This outer try block is used to thwart exception filter 
    // attacks which would prevent the inner finally 
    // block from executing and resetting the impersonation.
    try
    {
        try
        {
            impersonatedUser = clientId.Impersonate();
            if (impersonatedUser != null)
            {
                // Perform some action using impersonation.
            }
        }
        finally
        {
            // Undo impersonation.
            if (impersonatedUser != null)
                impersonatedUser.Undo();
        }
    }
    catch
    {
        throw;
    }
}

Visual Basic

<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub  WindowsIDTestProcVB ()
    Dim clientId As WindowsIdentity
    Dim impersonatedUser As WindowsImpersonationContext

    ' Get the client ID.
    clientId = SqlContext.WindowsIdentity

    ' This outer try block is used to thwart exception filter 
    ' attacks which would prevent the inner finally 
    ' block from executing and resetting the impersonation.

    Try
        Try

            impersonatedUser = clientId.Impersonate()

            If impersonatedUser IsNot Nothing Then
                ' Perform some action using impersonation.
            End If

        Finally
            ' Undo impersonation.
            If impersonatedUser IsNot Nothing Then
                impersonatedUser.Undo()
            End If
        End Try

    Catch e As Exception

        Throw e

    End Try
End Sub