Tworzenie zestawu (Transact-SQL)
Tworzy moduł zarządzaną aplikację zawierającą w wystąpienie klasy metadane i kod zarządzany jako obiekt SQL Server.Odwołując się do tego modułu, typowe funkcje runtime (CLR) języka, procedur przechowywanych, wyzwalaczy, zagregowanych danych zdefiniowane przez użytkownika i typy zdefiniowane przez użytkownika mogą być tworzone w bazie danych.
Składnia
CREATE ASSEMBLY assembly_name
[ AUTHORIZATION owner_name ]
FROM { <client_assembly_specifier> | <assembly_bits> [ ,...n ] }
[ WITH PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } ]
[ ; ]
<client_assembly_specifier> :: =
'[\\computer_name\]share_name\[path\]manifest_file_name'
| '[local_path\]manifest_file_name'
<assembly_bits> :: =
{ varbinary_literal | varbinary_expression }
Argumenty
assembly_name
Jest to nazwa wirtualny plik dziennika.Nazwa musi być unikatowa w obrębie bazy danych i prawidłowego identyfikatora.AUTORYZACJAowner_name
Określa nazwę użytkownika lub rolę jako właściciel wirtualny plik dziennika.owner_namemusi być nazwa roli, której bieżący użytkownik jest element członkowskilub bieżący użytkownik musi mieć uprawnienia PERSONIFIKUJ na owner_name.Jeśli nie określono własność znajduje się do bieżącego użytkownika.<client_assembly_specifier>
Określa ścieżka lokalną lub lokalizacji sieciowej, w którym znajduje się wirtualny plik dziennika przekazać, a także nazwę pliku manifestu, która odpowiada do wirtualny plik dziennika.<client_assembly_specifier> może być wyrażona jako stały ciąg lub wyrażenie oceny stałej ciąg, ze zmiennymi.Tworzenie zestawu nie obsługuje ładowania multimodule zespołów.SQL Serverposzukuje również zależne zestawy tego wirtualny plik dziennika w tej samej lokalizacji i również zostanie przesłany z tego samego właściciela jako poziomgłównywirtualny plik dziennika. Jeśli te zestawy zależne nie zostały znalezione i nie zostały one już załadowane w bieżącej bazie danych, tworzenie zestawu nie powiedzie się.Jeśli zestawy zależne są już załadowane w bieżącej bazie danych, właściciela tych zestawów musi być taka sama, jak właściciel nowo utworzonego wirtualny plik dziennika.<client_assembly_specifier> nie może być określony, jeśli zalogowany użytkownik jest uznawane.
<specyfikatorze>
Jest to lista wartości binarnych, wchodzące w skład wirtualny plik dziennika i zależne zestawy.Pierwsza wartość na liście jest uważany zapoziomgłówny -wirtualny plik dziennika. Wartości odpowiadające zależne zestawy mogą być dostarczane w dowolnej kolejności.Wszelkie wartości, które nie odpowiadają zależności głównego wirtualny plik dziennika są ignorowane.varbinary_literal
Jest varbinary literal.varbinary_expression
To wyrażenie typu varbinary.PERMISSION_SET { bezpieczne | EXTERNAL_ACCESS | NIEBEZPIECZNE}
Określa zestaw uprawnień dostępu kodu, które są przyznawane wirtualny plik dziennika , gdy jest dostępny przez SQL Server.Jeśli nie określono bezpieczne jest stosowany jako domyślny.Zaleca się użycie bezpiecznego.BEZPIECZNE jest najbardziej restrykcyjne uprawnienia zestaw.Kod wykonywany przez wirtualny plik dziennika uprawnieniami awaryjny nie może uzyskać dostępu do zewnętrznego systemu zasobów, takich jak pliki, sieci, zmienne środowiskowe lub rejestru.
EXTERNAL_ACCESS włącza zestawy dostępu do niektórych zasobów systemowych zewnętrznych, takich jak pliki, sieci, zmiennych środowiskowych i rejestru.
NIEBEZPIECZNY włącza zestawy nieograniczony dostęp do zasobów, zarówno wewnątrz, jak i poza wystąpienie SQL Server.Kod uruchomiony z wewnątrz niebezpieczne wirtualny plik dziennika można wywoływać kod niezarządzany.
Uwaga dotycząca zabezpieczeń BEZPIECZNE jest ustawienie uprawnienia zalecane dla zespołów, które wykonywać zadania zarządzania obliczeń i danych bez uzyskiwania dostępu do zasobów poza wystąpienie SQL Server.
Zaleca się używanie zestawów, które dostęp do zasobów znajdujących się poza wystąpienie EXTERNAL_ACCESS SQL Server.Zestawy EXTERNAL_ACCESS zawierają zabezpieczenia niezawodności i skalowalności zespoły bezpieczne, ale z perspektywa zabezpieczeń są podobne do zespołów niebezpieczne.Wynika to jest domyślnie uruchamiana kodu w zestawach EXTERNAL_ACCESS SQL Serverkontousługa i uzyskuje dostęp do zasobów zewnętrznych na tym koncie, chyba że kod personifikuje jawnie obiektu wywołującego. W związku z tym, uprawnienie do tworzenia zestawów EXTERNAL_ACCESS powinny być przyznane tylko identyfikatory logowania, które są zaufane na uruchomienie kodu w SQL Serverkontausługa . Aby uzyskać więcej informacji o personifikacji, zobacz CLR integracji zabezpieczeń.
Określanie NIEBEZPIECZNY włącza kod w pełną swobodę wirtualny plik dziennika do wykonywania operacji w SQL Server przestrzeni procesu, który potencjalnie złamanie niezawodności z SQL Server.NIEBEZPIECZNE zestawy można także potencjalnie subvert system zabezpieczeń albo SQL Server lub wspólne środowiska wykonawczego języka.NIEBEZPIECZNE uprawnienia należy przyznawać tylko do bardzo zaufanych zestawów.Tylko członkowie sysadmin stała rola serwera można tworzyć i zmieniać zespoły niebezpieczne.
Aby uzyskać więcej informacji na temat wirtualny plik dziennika zestawy uprawnień zobacz Zespoły projektowanie.
Uwagi
Tworzenie zestawu wysyła wirtualny plik dziennika wcześniej skompilowanego pliku .dll z kod zarządzany do użycia wewnątrz wystąpienie programu SQL Server.
SQL Servernie umożliwia rejestrowanie różnych wersji wirtualny plik dziennika o takiej samej nazwie, kultura i kluczpubliczny.
Podczas próby dostępu do wirtualny plik dziennika określonego w <client_assembly_specifier>, SQL Server personifikuje kontekstu zabezpieczeń bieżącego logowania systemu Windows.Jeśli <client_assembly_specifier> Określa lokalizację sieciową (UNC ścieżka), personifikacja bieżącego logowania nie prowadzi do przodu do lokalizacji sieciowej z powodu ograniczeń delegacji.W tym przypadekprogram access jest dokonywane za pomocą kontekstu zabezpieczeń SQL Serverkontausługa . Aby uzyskać więcej informacji, zobacz Poświadczenia (aparat bazy danych).
Oprócz głównego wirtualny plik dziennika określonego przez assembly_name, SQL Server próbuje przekazać wszelkie zestawy, które odwołują się główny wirtualny plik dziennika przekazywanych.Odwołanie wirtualny plik dziennika już zostało przesłane do bazy danych z powodu wcześniejszych Tworzenie zestawu instrukcja, tego wirtualny plik dziennika nie jest załadowany, ale jest dostępna do głównego wirtualny plik dziennika.Jeśli zależnego wirtualny plik dziennika nie został załadowany wcześniej, ale SQL Server nie może zlokalizować pliku manifestu, jej w katalogu źródło Tworzenie zestawu zwraca błąd.
Jeśli zestawy zależne, wywoływany przez głównego wirtualny plik dziennika nie są już w bazie danych, są niejawnie załadowane wraz z głównego wirtualny plik dziennikamają te same uprawnienia zestaw jako poziomgłównywirtualny plik dziennika. Jeśli zestawy zależne muszą utworzone przy użyciu różnych uprawnień zestaw niżpoziomgłówny -wirtualny plik dziennika, muszą one jawnie przekazany przed poziomgłównegowirtualny plik dziennika z odpowiednimi uprawnieniami zestaw.
Sprawdzanie poprawności zestawu
SQL Serversprawdza przekazany przez tworzenie zestawu instrukcja dla zagwarantowania następujące pliki binarne wirtualny plik dziennika :
wirtualny plik dziennika binarne uformowany z prawidłowym metadane i segmenty kodu i segmenty kodu mają ważne instrukcje języka (Intermediate) pośredniego firmy Microsoft.
zestaw system zestawów odwołuje się jest jeden z następujących zestawów obsługiwanych w SQL Server: Plik Microsoft.VisualBasic.dll, Mscorlib.dll, System.Data.dll, System.dll, System.Xml.dll, Microsoft.Visualc.dll, Custommarshallers.dll, System.Security.dll, System.Web.Services.dll, System.Data.SqlXml.dll, System.Core.dll i System.Xml.Linq.dll.Odwołując się do innych zestawów systemowych, ale musi być jawnie zarejestrowane w bazie danych.
Dla elementów utworzonych za pomocą zestawów uprawnień dostępu zewnętrznego lub bezpieczne:
Kod wirtualny plik dziennika powinien być typ palety.Typ bezpieczeństwa jest określany przez, na którym działa wspólne weryfikator środowiska wykonawczego języka wirtualny plik dziennika.
wirtualny plik dziennika nie powinna zawierać żadnych elementów danych statycznych w jej klas, chyba że są oznaczone jako tylko do odczytu.
Klasy w wirtualny plik dziennika nie mogą zawierać finalizatorów metod.
Klasy lub metody wirtualny plik dziennika powinny adnotacje tylko z atrybutami dozwolonych kodu.Aby uzyskać więcej informacji, zobacz Atrybuty niestandardowe dla procedur CLR.
Oprócz poprzednich kontroli, które są wykonywane podczas tworzenia zestawu wykonuje istnieją dodatkowe kontrole, które są wykonywane w czas wykonywania kodu w wirtualny plik dziennika:
Wywoływanie niektórych Microsoft .NET Framework interfejsów API, które wymagają określonego uprawnienia dostępu do kodu może się nie powieść, jeśli nie ma uprawnienia zestaw wirtualny plik dziennika tego uprawnienia.
Dla zestawów bezpieczne i EXTERNAL_ACCESS próby wywołania .NET Framework API, które są przypisane w niektórych HostProtectionAttributes będzie zakończą się niepowodzeniem.
Aby uzyskać więcej informacji, zobacz Zespoły projektowanie.
Uprawnienia
Wymaga tworzenia zestawu uprawnień.
Jeśli PERMISSION_SET = określono EXTERNAL_ACCESS SQL Server logowania musi mieć uprawnienie zewnętrznego zestawu dostępu na serwerze.Jeśli PERMISSION_SET = NIEBEZPIECZNY jest określony, członkostwo w sysadmin stała rola serwera jest wymagana.
Użytkownik musi być właścicielem wszystkie zestawy, które odwołuje się wirtualny plik dziennika które są przekazywane, jeżeli zestawy już istnieje w bazie danych.Przekazywanie wirtualny plik dziennika przy użyciu pliku ścieżka, bieżący użytkownik musi być logowania systemu Windows uwierzytelnione lub element członkowski sysadmin stała rola serwera.Logowanie do systemu Windows użytkownika, który wykonuje Tworzenie zestawu musi mieć uprawnienia odczytu na udział i pliki ładowane w instrukcja.
Aby uzyskać więcej informacji na temat wirtualny plik dziennika zestawy uprawnień zobacz Zespoły projektowanie.
Przykłady
W poniższym przykładzie założono, że Aparat baz danych programu SQL Server próbki są instalowane w lokalizacji domyślnej komputera lokalnego, a skompilowana aplikacja przykładowa HelloWorld.csproj.Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące instalowania przykładów i przykładowych baz danych programu SQL Server.
CREATE ASSEMBLY HelloWorld
FROM <system_drive>:\Program Files\Microsoft SQL Server\100\Samples\HelloWorld\CS\HelloWorld\bin\debug\HelloWorld.dll
WITH PERMISSION_SET = SAFE;