Udostępnij za pośrednictwem


Obsługiwane środowiska CLR

The Microsoft .NET Framework common language runtime (CLR) jest środowiskiem wykonującego wiele nowoczesnych językach programowania, w tym Microsoft Visual C#, Microsoft języka Visual Basic i Microsoft Visual C++.CLR funkcje zebrane garbage pamięci, pierwszeństwa wątków, usługi metadane (typ projektu), możliwość weryfikacji kodu i zabezpieczenia dostępu kodu.Środowisko CLR używa metadane zlokalizować i załadować klasy, układ wystąpień w pamięci, wywołania metod rozwiązania, generowanie kodu macierzystego, wymuszenia zabezpieczeń i ustawienie run -czas kontekst granic.

Środowisko CLR i SQL Server różnią się jako Uruchom -czas środowisk w sposobie obsługi pamięci, wątki i synchronizacja.W tym temacie opisano sposób, w którym te dwa razy uruchomienia są zintegrowane tak, aby wszystkie zasoby systemowe są jednolicie zarządzane.W tym temacie omówiono także sposób, w którym CLR zabezpieczenia dostępu kodu (CAS) i SQL Server są zintegrowane zabezpieczenia, aby zapewnić niezawodne i bezpieczne środowisko dla kodu użytkownika.

Podstawowe pojęcia CLR architektury

W.NET Framework programistą zapisuje w języku wysokiego poziom implementująca Klasa definiująca jego strukturę (na przykład pola lub właściwości klasy) i metody.Niektóre z tych metod może być statyczne funkcji.Kompilacji program tworzy plik o nazwie wirtualny plik dziennika zawierającego kod skompilowany w Microsoft język pośredni (Intermediate) i manifest zawiera wszystkie odwołania do zestawów zależnych.

Ostrzeżenie

Zestawy są istotnym elementem architektury środowiska CLR.Są one jednostek opakowań, wdrażania i wersji kodu aplikacji.NET Framework.Korzystanie z zestawów można wdrażać kod aplikacji wewnątrz bazy danych i zapewnić jednolity sposób administrowania, kopię zapasową, i przywracanie zakończenie aplikacji baz danych.

Manifest wirtualny plik dziennika zawiera metadane dotyczące montażu, opisujący wszystkie struktur, pól, właściwości, klas, relacje dziedziczenia, funkcje i metody zdefiniowane w programie.Manifest ustala tożsamości wirtualny plik dziennikau, określa pliki wchodzące w skład wirtualny plik dziennikau implementacji, określa typy i zasobów, wchodzące w skład wirtualny plik dziennikau, itemizes kompilacji -czas zależności inne zespoły i określa wirtualny plik dziennika uprawnień wymaganych do montażu działać poprawnie.Te informacje są używane przy uruchomieniu czas do rozpoznania odwołania, wymuszają zasady wiązania wersja i sprawdzenia spójności załadowanych zestawach.

.NET Framework obsługuje atrybutów niestandardowych dla adnotacji klas, właściwości, funkcji i metod oraz informacji dodatkowych aplikacji może przechwycić metadane.Wszystkie.NET Framework kompilatory zajmują adnotacje bez interpretacji i przechowywanie ich w postaci wirtualny plik dziennika metadane.Adnotacje można zbadać w taki sam sposób jak inne metadane.

Kod zarządzany jest instrukcje MSIL wykonywane w środowisko CLR zamiast bezpośrednio przez system operacyjny.Aplikacjami zarządzanego kodu nabywania usług CLR, takich jak automatyczne wyrzucania elementów bezużytecznych run-time kontrola typówi obsługę zabezpieczeń.Usługi te pomagają zachowanie jednolitego i język niezależny od platformy aplikacji kod zarządzany.

Cele projektu integracji CLR

Podczas wykonywania kodu użytkownika wewnątrz środowiska CLR obsługiwanych w SQL Server (nazywany integracja CLR), zastosuj następujące cele projektu:

Niezawodność (bezpieczeństwo)

Kod użytkownika nie powinni wykonywać operacje naruszyć integralność proces aparatu bazy danych, takich jak popping okno komunikatu żądania odpowiedzi użytkownika lub proces zostanie zakończony.Kod użytkownika nie powinna mieć należy zastąpić buforów pamięci aparatu bazy danych lub wewnętrznych struktur danych.

Skalowalność

SQL Server and the CLR have different internal models for scheduling and memory management.SQL Server supports a cooperative, non-preemptive threading model in which the threads voluntarily yield execution periodically, or when they are waiting on locks or I/O.Środowisko CLR obsługuje model wątka cenią sobie wcześniejsze.Jeśli uruchomiony kod użytkownika SQL Server bezpośrednio może wywołać wątków pierwotnych, system operacyjny, a następnie nie obsługują również do SQL Server Harmonogram zadań i może zmniejszyć skalowalność systemu.Środowisko CLR nie rozróżnia pamięci wirtualnej i fizycznej, ale SQL Server bezpośrednio zarządza pamięci fizycznej i jest wymagana do używania pamięci fizycznej w ramach limitu konfigurowalnych.

Wyzwanie integracja dla relacyjnej prezentowanie różnych modeli zarządzania wątków, planowania i pamięć system zarządzania bazami danych (system system zarządzania relacyjnymi bazami danych) skaluje wsparcia tysięcy sesji równoczesnych użytkowników.Architektura powinny zapewnić skalowalności systemu nie odczyta kod użytkownika wywoływanie interfejsów programowania aplikacji (API) dla wątków, pamięci i synchronizacji pierwotnych bezpośrednio.

Zabezpieczenia

Kod użytkownika w bazie danych należy wykonać SQL Server zasady uwierzytelnianie i autoryzacja podczas uzyskiwania dostępu do obiektów bazy danych, takich jak tabele i kolumny.Ponadto administratorów baz danych powinny móc kontrolować dostęp do zasobów systemu operacyjnego, takie jak pliki i dostępu do sieci z kodu użytkownika w bazie danych.Staje się to ważne, jako zarządzane języków programowania (w przeciwieństwie do niezarządzanego języków, takich jak języka Transact-SQL) zapewnia API dostępu do takich zasobów.System musi przewidywać bezpieczny sposób kod użytkownika dostępu do komputera zasobów poza Aparat baz danych procesu.Aby uzyskać więcej informacji, zobacz CLR integracji zabezpieczeń.

Wydajność

Zarządzany kod użytkownika działający w Aparat baz danych powinno być porównywalne do tego samego kodu wydajności obliczeniowej uruchomione poza serwerem.Dostęp do bazy danych z kodu zarządzanego użytkownika nie jest tak szybka jak macierzystym Transact-SQL.Aby uzyskać więcej informacji, zobacz Wydajność CLR integracji.

CLR usług

Środowisko CLR zawiera liczbę usług, aby ułatwić osiągnięcie celów projektowania CLR integracja z SQL Server.

Typ kontroli bezpieczeństwa

Typ -kod zarządzany jest kodem, który uzyskuje dostęp do pamięci struktur dobrze sposobami.Na przykład podane nieprawidłowe odwołanie do obiektu, typ -kod zarządzany dostępu do pamięci przesunięcia środków odpowiadających członkom pole Rzeczywista.Jednakże jeśli kod uzyskuje dostęp do pamięci przesunięcia dowolnego wewnątrz lub na zewnątrz zakres pamięci, której należy obiekt, to nie zostanie typ palety.Zestawy ładowane w CLR, przed instrukcje MSIL kompilacji środowiska wykonawczego kompilowany na just-in-czas (JIT) wykonuje etapu weryfikacji, który analizuje kod, aby określić jego typ bezpieczeństwa.Kod, który przechodzi pomyślnie tej weryfikacji jest nazywany sprawdzalny typu -kod zarządzany.

Domen aplikacji

Środowisko CLR obsługuje pojęcie domen aplikacji jako wykonanie stref w ramach procesu hosta, gdzie zestawów zawierających kod zarządzany zostanie załadowany i wykonany.Aplikacja domena granicę zapewnia izolację między zespołów.Zestawy są odizolowane w kategoriach widoczność zmienne statyczne i członkowie danych i możliwość wywoływania kodu dynamicznie.Domeny aplikacji są również mechanizm do załadunku i rozładunku kodu.Kod może być usunięte z pamięci tylko przez rozładunku domena aplikacji.Aby uzyskać więcej informacji, zobacz Domeny aplikacji i zabezpieczeń integracji CLR.

Zabezpieczenia dostępu do kodu (CAS)

CLR system zabezpieczeń umożliwia sterowanie jakie operacje wykonywane przez przypisanie uprawnień do kod zarządzany kodu.Uprawnienia dostępu do kodu są przypisywane oparte na tożsamość kod (na przykład, podpis wirtualny plik dziennika) lub pochodzenia kod.

Środowisko CLR zapewnia zasady komputera, która może być zestaw przez administratora komputera.Zasada ta określa dotacji uprawnienie dla dowolnego kod zarządzany uruchomione na komputerze.Ponadto istnieje zasada zabezpieczeń poziom hosta, która może być używany przez hosty takich jak SQL Server określić dodatkowe ograniczenia na kod zarządzany.

Jeśli zarządzany API w.NET Framework udostępnia operacji na zasoby, które są chronione przez uprawnienie dostępu do kodu, interfejs API zostanie popytu tego uprawnienia, przed uzyskaniem dostępu do zasób.To żądanie powoduje, że system zabezpieczeń CLR kompleksowe wyboru każdej jednostki kod wyzwalacza (wirtualny plik dziennika) w stos wywołań.Tylko wtedy, gdy wywołanie cały łańcuch ma uprawnienia dostępu do zasób otrzyma.

Należy zauważyć, że możliwość generowania kod zarządzany dynamicznie, za pomocą interfejsu API Reflection.Emit nie jest obsługiwany wewnątrz środowiska CLR obsługiwanych w SQL Server.Kod taki nie miałoby CAS uprawnień do uruchomienia i nie powiedzie się przy uruchomieniu czas.Aby uzyskać więcej informacji, zobacz Zabezpieczenia dostępu do kodu integracji CLR.

Atrybuty ochrony hosta (HPAs)

Środowisko CLR udostępnia mechanizm adnotacji zarządzane interfejsów API, które są częścią.NET Framework z niektórych atrybutów, które mogą być przydatne do hosta CLR.Przykładami takich atrybutów:

  • SharedState, która wskazuje, czy interfejs API udostępnia możliwość tworzenia i zarządzania stanem udostępnionej (na przykład klasy statyczne pola).

  • Synchronizacja, która wskazuje, czy interfejs API udostępnia możliwość wykonywania synchronizacji wątków.

  • ExternalProcessMgmt, która wskazuje, czy interfejs API udostępnia sposobem kontrolowania procesu hosta.

Biorąc pod uwagę te atrybuts, hosta można określić listę HPAs, takich jak SharedState atrybut, który powinien niedopuszczalne w obsługiwanym środowisku.przypadek środowiska CLR odrzuca prób przez kod użytkownika do wywoływania interfejsów API, które są przypisane przez HPAs na liście zabronionych.Aby uzyskać więcej informacji, zobacz Atrybuty ochrony hosta i integracji CLR programowania.

Jak SQL Server i środowisko CLR współpracują ze sobą

W tej sekcji omówiono sposób SQL Server integruje modeli zarządzania wątków, planowanie, synchronizacji i pamięci z SQL Server i CLR.In particular, this section examines the integration in light of scalability, reliability, and security goals.SQL Server essentially acts as the operating system for the CLR when it is hosted inside SQL Server.Środowisko CLR wywołań procedur niskiego poziom implementowane przez SQL Server dla wątków, planowanie, synchronizacji i zarządzania pamięci.Są one tym samym pierwotnych, pozostałe SQL Server używa aparatu.Ta metoda zapewnia kilka korzyści skalowalność, niezawodność i bezpieczeństwo.

Skalowalność: Wspólnych wątków, planowania i synchronizacji

CLR wywołania SQL Server API do tworzenia wątków, zarówno dla uruchomionego kodu użytkownika i dla własnego użytku wewnętrznego.Aby zsynchronizować między wiele wątków, środowisko CLR wywołuje SQL Server synchronizacji obiektów.Dzięki temu SQL Server Harmonogram wykonywania innych zadań, gdy wątek oczekuje na obiektu synchronizacji.Na przykład, gdy środowisko CLR inicjuje wyrzucanie elementów bezużytecznych, wszystkie wątki czekać na wyrzucanie elementów bezużytecznych do zakończenia.Ponieważ wątki CLR i obiektów synchronizacji czekają na znane SQL Server Harmonogram, SQL Server można zaplanować wątków, które są uruchomione inne zadania bazy danych nie obejmujące CLR.Umożliwia także SQL Server do wykrywać zakleszczenie, obejmujących blokady przez CLR synchronizacji obiektów i zatrudnienie tradycyjnych technik usuwania zakleszczenie.

Zarządzany kod działa w preemptively SQL Server. SQL Server Harmonogram ma możliwość wykrywania i powstrzymywania wątków, które nie zostały uzyskane na znaczną ilość czas.Wątki umożliwia spinanie CLR do SQL Server wątków wynika, że SQL Server harmonogramu można zidentyfikować "przemijające" wątki w środowisko CLR i zarządzanie ich priorytetu.Takie przemijające wątki są zawieszone i ponownie umieścić w kolejce.Wątki, które często są identyfikowane jako przemijające wątków nie mogą być uruchamiane dla danego okresu czas tak, aby inni pracownicy wykonujący nakaz można uruchomić.

Ostrzeżenie

Długim kod zarządzany, który uzyskuje dostęp do danych lub za mało pamięci do wyrzucanie elementów bezużytecznych wyzwalacza przydziela da się automatycznie.Długotrwały kod zarządzany nie uzyskać dostępu do danych lub przydzielić pamięci wystarczająco zarządzanych do wyrzucanie elementów bezużytecznych wyzwalacza należy jawnie plon przez wywołanie funkcja System.Thread.Sleep().NET Framework.

Skalowalność: Wspólne zarządzanie pamięcią

Wywołania CLR SQL Server pierwotnych podziału i de-allocating pamięci.Because the memory used by the CLR is accounted for in the total memory usage of the system, SQL Server can stay within its configured memory limits and ensure the CLR and SQL Server are not competing with each other for memory.SQL Server can also reject CLR memory requests when system memory is constrained, and ask CLR to reduce its memory use when other tasks need memory.

Niezawodność: Domeny aplikacji i nieodwracalny wyjątków

Gdy kod zarządzany.NET Framework API napotka krytyczne wyjątki, takie jak przepełnienia braku pamięci lub stosu, nie zawsze jest możliwe odzyskać takich awariach i zapewnić konsekwentne i prawidłowe semantyka ich realizacji.Te interfejsy API podnoszenie wątek przerwać wyjątek w odpowiedzi na te błędy.

Gdy w SQL Server, takie Wątek przerywa są realizowane w następujący sposób: Środowisko CLR wykrywa każde Państwo udostępnionych w aplikacji domena w którym występuje przerywanie wątek.Środowisko CLR robi to, sprawdzając obecność obiektów synchronizacji.Jeśli domena aplikacji jest stan udostępnionego, a następnie jest zwalniany domeny aplikacji, sam.Rozładunku domena aplikacji zatrzymuje transakcji bazy danych, które są aktualnie uruchomione w tej domenie aplikacji.Ponieważ obecność udostępnionych Państwo poszerzyć wpływ takich wyjątków krytycznych sesji użytkownika innego niż jeden wyzwolenie wyjątku, SQL Server i środowisko CLR podjęły kroki w celu zmniejszenia prawdopodobieństwa stan udostępnionego.Aby uzyskać więcej informacji, zobacz temat.NET Framework dokumentacji.

Zabezpieczenia: Zestawy uprawnień

SQL Server Pozwala określić wymagania dotyczące niezawodności i bezpieczeństwa dla kodu wdrożony do bazy danych.Gdy zespoły są przekazywane do bazy danych, autor wirtualny plik dziennika można określić jedną z trzech zestawów uprawnień dla tego wirtualny plik dziennika: BEZPIECZNE, EXTERNAL_ACCESS i NIEBEZPIECZNY.

Zestaw uprawnień

BEZPIECZNE

EXTERNAL_ACCESS

NIEBEZPIECZNE

Zabezpieczenia kodu dostępu

Tylko do wykonywania

Wykonanie + dostęp do zasobów zewnętrznych

Nieograniczony

Ograniczenia modelu programowania

Tak

Tak

Brak ograniczeń

Wymóg możliwość weryfikacji

Tak

Tak

Nie

Możliwość wywoływania kodu macierzystego

Nie

Nie

Tak

BEZPIECZNE jest najbardziej niezawodne i bezpieczne tryb z ograniczenia skojarzone dozwolonych model programowania.BEZPIECZNE zespołów otrzymują wystarczających uprawnień do uruchomienia, wykonywanie obliczeń i mają dostęp do lokalnej bazy danych.BEZPIECZNE zespoły muszą być sprawdzalny wpisz bezpieczne i nie mogą wywoływać kod niezarządzany.

NIEBEZPIECZNY jest wysoce zaufanych kodu, które mogą być tworzone tylko przez administratorów bazy danych.To zaufane, nie ma kodu zabezpieczenia dostępu kodu ograniczeń, a mogą wywoływać kod niezarządzany (macierzysta).

EXTERNAL_ACCESS udostępnia opcję zabezpieczeń pośrednich, umożliwiając kodu dostępu do zasobów zewnętrznych do bazy danych, ale nadal występuje gwarancji niezawodności bezpieczne.

SQL Serverużywa warstwy zasad CAS poziomie hosta do zestaw up zasady hosta, która udziela jeden z trzech zestaws uprawnienia na podstawie uprawnienia zestaw przechowywane w SQL Server wykazów.Kod zarządzany uruchomiony wewnątrz bazy danych zawsze pobiera jednego z tych zestawów uprawnień dostępu do kodu.

Ograniczenia modelu programowania

Model programowania kod zarządzany w SQL Server obejmuje pisanie funkcji, procedur i typy, które zazwyczaj nie wymagają użycia Państwo utrzymywane przez wiele wywołania lub udostępnianie stanu na wiele sesji użytkownika.Ponadto zgodnie z wcześniejszym opisem obecność udostępnionych Państwo może spowodować krytycznych wyjątków, których wpływ na skalowalność i niezawodność aplikacji.

Uwzględniając powyższe uwagi, możemy zniechęcić używane zmienne statyczne i członkowie danych statycznych klas używanych w SQL Server.Dla zestawów bezpieczne i EXTERNAL_ACCESS SQL Server sprawdza metadane na tworzenie wirtualny plik dziennika zgromadzenie czas i tworzenie takich zespołów nie działa, jeśli znajdzie dane statyczne członków i zmienne

SQL Serveruniemożliwia także wywołań.NET Framework API, że adnotacje są z SharedState, Synchronization i ExternalProcessMgmt hosta ochronę atrybutów.Zapobiega to bezpieczne i zestawy EXTERNAL_ACCESS od wywołanie API wszelkie włączyć stanu udostępniania wykonywania synchronizacji i wpływające na integralność SQL Server procesu.Aby uzyskać więcej informacji, zobacz Ograniczenia Model programowania integracji CLR.