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_ACCESS
a UNSAFE
(zadané pomocí možnosti PERMISSION_SET
CREATE 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_CONFIG a 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
.
Doporučená nastavení oprávnění
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_ACCESS
a 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 |