Sdílet prostřednictvím


Zabezpečení přístupu kódu integrace CLR

platí pro:SQL Server

Modul CLR (Common Language Runtime) podporuje model zabezpečení označovaný jako zabezpečení přístupu kódu pro spravovaný kód. V tomto modelu jsou oprávnění udělena sestavením na základě identity kódu. Další informace naleznete v tématu Zabezpečení přístupu kódu.

Zásady zabezpečení, které určují oprávnění udělená sestavením, jsou definována na třech různých místech:

  • zásady počítače: Tato zásada platí pro veškerý spravovaný kód spuštěný na počítači, na kterém je nainstalovaný SQL Server.

  • zásady uživatele: Tato zásada platí pro spravovaný kód hostovaný procesem. Pro SQL Server jsou zásady uživatele specifické pro účet Systému Windows, na kterém je spuštěná služba SQL Serveru.

  • zásady hostitele: Tato zásada je nastavena hostitelem modulu CLR (v tomto případě SQL Server), který je v platnosti pro spravovaný kód spuštěný v tomto hostiteli.

Mechanismus zabezpečení přístupu kódu podporovaný modulem CLR vychází z předpokladu, že modul runtime může hostovat plně důvěryhodný i částečně důvěryhodný kód. Prostředky chráněné zabezpečením přístupu kódu CLR jsou obvykle zabaleny spravovanými programovacími rozhraními aplikací, které před povolením přístupu k prostředku vyžadují odpovídající oprávnění. Požadavek na oprávnění je splněn pouze v případě, že všichni volající (na úrovni sestavení) v zásobníku volání mají odpovídající oprávnění prostředku.

Sada oprávnění zabezpečení přístupu kódu udělená spravovanému kódu při spuštění uvnitř SQL Serveru je průnikem sady oprávnění udělených předchozími třemi úrovněmi zásad. I když SQL Server udělí sadu oprávnění sestavení načteného do SQL Serveru, může být konečná sada oprávnění udělená uživatelskému kódu dále omezena zásadami na úrovni uživatele a počítače.

Sady oprávnění na úrovni zásad hostitele SQL Serveru

Sada oprávnění zabezpečení přístupu kódu udělená sestavením na úrovni zásad hostitele SQL Serveru je určena sadou oprávnění zadanou při vytváření sestavení. Existují tři sady oprávnění: SAFE, EXTERNAL_ACCESSa UNSAFE (zadané pomocí možnosti PERMISSION_SETCREATE ASSEMBLY).

SQL Server poskytuje modulu CLR úroveň zásad zabezpečení na úrovni hostitele při hostování. Tato zásada je další úroveň zásad nižší než dvě úrovně zásad, které se vždy projeví. Tato zásada je nastavená pro každou doménu aplikace vytvořenou SQL Serverem. Tato zásada není určená pro výchozí doménu aplikace, která by se projevila, když SQL Server vytvoří instanci modulu CLR.

Zásady na úrovni hostitele SQL Serveru jsou kombinací pevných zásad SYSTÉMU SQL Server pro systémová sestavení a uživatelem zadané zásady pro uživatelská sestavení.

Pevné zásady pro sestavení CLR a systémová sestavení SQL Serveru jim udělí úplný vztah důvěryhodnosti.

Uživatelsky zadaná část zásad hostitele SYSTÉMU SQL Server je založená na vlastníkovi sestavení, který určuje jeden ze tří kbelíků oprávnění pro každé sestavení. Další informace o následujících oprávněních zabezpečení najdete v sadě .NET Framework SDK.

TREZOR

Jsou povoleny pouze interní výpočty a přístup k místním datům. SAFE je nejvíce omezující sada oprávnění. Kód spuštěný sestavením s oprávněními SAFE nemůže přistupovat k externím systémovým prostředkům, jako jsou soubory, síť, proměnné prostředí nebo registr.

SAFE sestavení mají následující oprávnění a hodnoty:

Povolení Hodnoty a popis
SecurityPermission Execution: Oprávnění ke spuštění spravovaného kódu.
SqlClientPermission Context connection = true, context connection = yes: Lze použít pouze kontextové připojení a připojovací řetězec může zadat pouze hodnotu context connection=true nebo context connection=yes.

AllowBlankPassword = false: Prázdná hesla nejsou povolená.

EXTERNAL_ACCESS

EXTERNAL_ACCESS sestavení mají stejná oprávnění jako sestavení SAFE s další možností přístupu k externím systémovým prostředkům, jako jsou soubory, sítě, proměnné prostředí a registr.

EXTERNAL_ACCESS sestavení mají také následující oprávnění a hodnoty:

Povolení Hodnoty a popis
DistributedTransactionPermission Unrestricted: Distribuované transakce jsou povoleny.
DNSPermission Unrestricted: Oprávnění požadovat informace z názvových serverů domény.
EnvironmentPermission Unrestricted: Úplný přístup k proměnným systémového a uživatelského prostředí je povolený.
EventLogPermission Administer: Jsou povoleny následující akce: vytvoření zdroje událostí, čtení existujících protokolů, odstranění zdrojů událostí nebo protokolů, reakce na položky, vymazání protokolu událostí, naslouchání událostem a přístup k kolekci všech protokolů událostí.
FileIOPermission Unrestricted: Úplný přístup k souborům a složkám je povolený.
KeyContainerPermission Unrestricted: Je povolený úplný přístup ke kontejnerům klíčů.
NetworkInformationPermission Access: Příkaz Ping je povolen.
RegistryPermission Umožňuje oprávnění ke čtení HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIGa HKEY_USERS.
SecurityPermission Assertion: Schopnost potvrdit, že všichni volající tohoto kódu mají požadovaná oprávnění pro operaci.

ControlPrincipal: Schopnost manipulovat s objektem objektu zabezpečení.

Execution: Oprávnění ke spuštění spravovaného kódu.

SerializationFormatter: Schopnost poskytovat služby serializace.
SmtpPermission Access: Odchozí připojení k portu hostitele SMTP 25 jsou povolená.
SocketPermission Connect: Odchozí připojení (všechny porty, všechny protokoly) na přenosové adrese jsou povolená.
SqlClientPermission Unrestricted: Úplný přístup ke zdroji dat je povolený.
StorePermission Unrestricted: Úplný přístup k úložištům certifikátů X.509 je povolený.
WebPermission Connect: Jsou povolena odchozí připojení k webovým prostředkům.

NEBEZPEČNÝ

UNSAFE umožňuje sestavením neomezený přístup k prostředkům, a to jak v rámci SQL Serveru, tak i mimo sql Server. Kód spuštěný z UNSAFE sestavení může také volat nespravovaný kód.

UNSAFE sestavení jsou uvedena FullTrust.

SAFE je doporučené nastavení oprávnění pro sestavení, která provádějí úlohy výpočtu a správy dat bez přístupu k prostředkům mimo SQL Server.

EXTERNAL_ACCESS se doporučuje pro sestavení, která přistupují k prostředkům mimo SQL Server. EXTERNAL_ACCESS sestavení se ve výchozím nastavení spouští jako účet služby SYSTÉMU SQL Server. Je možné EXTERNAL_ACCESS kód explicitně zosobnit kontext zabezpečení ověřování systému Windows volajícího. Vzhledem k tomu, že výchozí hodnota je spustit jako účet služby SYSTÉMU SQL Server, mělo by být uděleno oprávnění ke spuštění EXTERNAL_ACCESS pouze přihlašovacím údajům důvěryhodným pro spuštění jako účet služby.

Z hlediska zabezpečení jsou sestavení EXTERNAL_ACCESS a UNSAFE identická. Sestavení EXTERNAL_ACCESS však poskytují různé ochrany spolehlivosti a odolnosti, které nejsou v UNSAFE sestaveních.

Zadání UNSAFE umožňuje kódu v sestavení provádět nezákonné operace s prostorem procesu SQL Serveru, a proto může potenciálně ohrozit odolnost a škálovatelnost SQL Serveru. Další informace o vytváření sestavení CLR na SQL Serveru naleznete v tématu Správa sestavení integrace CLR.

Důležitý

SQL Server obsahuje sestavení CLR, která databázový stroj používá k poskytování určitých funkcí. Sestavení Microsoft.SQLServer.Types, které je součástí instalace SYSTÉMU SQL Server, se zobrazí v metadatech jako sestavení UNSAFE. To je podle návrhu. Tato sestavení jsou ve výchozím nastavení považována za důvěryhodná & zabezpečená.

Přístup k externím prostředkům

Pokud je u uživatelem definovaného typu (UDT), uložená procedura nebo jiný typ sestavení sestavení registrována v sadě oprávnění SAFE, pak spravovaný kód spuštěný v konstruktoru nemůže získat přístup k externím prostředkům. Pokud jsou však zadány sady oprávnění EXTERNAL_ACCESS nebo UNSAFE a spravovaný kód se pokusí o přístup k externím prostředkům, SQL Server použije následující pravidla:

Když Potom
Kontext spuštění odpovídá přihlášení k SQL Serveru. Pokusy o přístup k externím prostředkům jsou odepřeny a vyvolá se výjimka zabezpečení.
Kontext spuštění odpovídá přihlášení systému Windows a kontext spuštění je původní volající. K externímu prostředku se přistupuje v kontextu zabezpečení účtu služby SQL Serveru.
Volající není původním volajícím. Přístup byl odepřen a vyvolá se výjimka zabezpečení.
Kontext spuštění odpovídá přihlášení systému Windows a kontext spuštění je původní volající a volající je zosobněný. Access používá kontext zabezpečení volajícího, a ne účet služby.

Souhrn sady oprávnění

Následující graf shrnuje omezení a oprávnění udělená SAFE, EXTERNAL_ACCESSa sady oprávnění UNSAFE.

Funkčnost SAFE EXTERNAL_ACCESS UNSAFE
Oprávnění zabezpečení přístupu kódu Spustit pouze Spuštění a přístup k externím prostředkům Neomezené (včetně volání nespravovaného kódu)
Omezení programovacího modelu Ano Ano Žádná omezení
Požadavek na ověřitelnost Ano Ano Ne
Přístup k místním datům Ano Ano Ano
Schopnost volat nativní kód Ne Ne Ano