Objekt SqlContext
platí pro:SQL Server
Spravovaný kód na serveru vyvoláte při volání procedury nebo funkce, když voláte metodu pro common language runtime (CLR) uživatelem definovaný typ nebo když vaše akce aktivuje trigger definovaný v některém z jazyků rozhraní .NET Framework. Vzhledem k tomu, že spuštění tohoto kódu je požadováno jako součást připojení uživatele, je vyžadován přístup k kontextu volajícího z kódu spuštěného na serveru. Kromě toho můžou být určité operace přístupu k datům platné pouze v případě, že jsou spuštěny v kontextu volajícího. Například přístup k vloženým a odstraněným pseudo tabulkám používaným v operacích triggeru je platný pouze v kontextu volajícího.
Kontext volajícího je abstrahován v objektu SqlContext
. Další informace naleznete v tématu Microsoft.SqlServer.Server.SqlContext.
SqlContext
poskytuje přístup k následujícím komponentám.
Komponenta | Popis |
---|---|
SqlPipe |
Tento objekt představuje potrubí, přes který tok výsledků do klienta. Další informace najdete v tématu objekt sqlPipe. |
SqlTriggerContext |
Tento objekt lze načíst pouze z triggeru CLR. Poskytuje informace o operaci, která způsobila aktivaci triggeru, a mapu sloupců, které byly aktualizovány. Další informace naleznete v tématu SqlTriggerContext objekt. |
IsAvailable |
Tato vlastnost slouží k určení dostupnosti kontextu. |
WindowsIdentity |
Tato vlastnost slouží k načtení identity systému Windows volajícího. |
Určení dostupnosti kontextu
Zadejte dotaz na SqlContext
třídu, abyste zjistili, jestli aktuálně spuštěný kód běží v procesu. Zkontrolujte vlastnost IsAvailable
objektu SqlContext
. Vlastnost IsAvailable
je určena jen pro čtení a vrací True
, pokud je volající kód spuštěný uvnitř SQL Serveru a pokud je možné získat přístup k jiným SqlContext
členům. Pokud IsAvailable
vlastnost vrátí False
, všechny ostatní členy SqlContext
vyvolá InvalidOperationException
, pokud se použije. Pokud IsAvailable
vrátí False
, jakýkoli pokus o otevření objektu připojení, který má v připojovacím řetězci hodnotu context connection=true, selže.
Načtení identity Systému Windows
Kód CLR, který se spouští uvnitř SQL Serveru, se vždy vyvolá v kontextu účtu procesu. Pokud by kód měl provádět určité akce pomocí identity volajícího uživatele místo identity procesu SQL Serveru, měl by být získán token zosobnění prostřednictvím WindowsIdentity
vlastnosti objektu SqlContext
. Vlastnost WindowsIdentity
vrátí instanci WindowsIdentity
představující identitu systému Windows volajícího nebo hodnotu null, pokud byl klient ověřen pomocí ověřování SYSTÉMU SQL Server. K této vlastnosti mají přístup pouze sestavení označená EXTERNAL_ACCESS
nebo oprávněními UNSAFE
.
Po získání objektu WindowsIdentity
můžou volající zosobnit klientský účet a provádět akce jejich jménem.
Identita volajícího je k dispozici pouze prostřednictvím SqlContext.WindowsIdentity
, pokud klient, který inicioval provádění uložené procedury nebo funkce připojené k serveru pomocí ověřování systému Windows. Pokud se místo toho použilo ověřování SQL Serveru, tato vlastnost má hodnotu null a kód nemůže zosobnit volajícího.
Příklad
Následující příklad ukazuje, jak získat identitu Systému Windows volajícího klienta a zosobnit klienta.
-
jazyka C#
jazyka C# - visual basic .NET
[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;
}
}