Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Applies to:SQL Server
Azure SQL Managed Instance
Hiermee maakt u een beheerde toepassingsmodule die klassemetagegevens en beheerde code bevat als een object in een exemplaar van SQL Server. Als u naar deze module verwijst, kunnen common Language Runtime-functies (CLR), opgeslagen procedures, triggers, door de gebruiker gedefinieerde aggregaties en door de gebruiker gedefinieerde typen worden gemaakt in de database.
Transact-SQL syntaxis-conventies
Syntax
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 }
Arguments
assembly_name
De naam van de assembly. The name must be unique within the database and a valid identifier.
AUTHORIZATION owner_name
Hiermee geeft u de naam van een gebruiker of rol op als eigenaar van de assembly.
owner_name must either be the name of a role of which the current user is a member, or the current user must have IMPERSONATE
permission on owner_name. Als dit niet is opgegeven, wordt het eigendom aan de huidige gebruiker gegeven.
<client_assembly_specifier>
Hiermee geeft u het lokale pad of de netwerklocatie op waar de assembly die wordt geüpload zich bevindt, en ook de naam van het manifestbestand dat overeenkomt met de assembly.
<client_assembly_specifier>
kan worden uitgedrukt als een vaste tekenreeks of een expressie die wordt geëvalueerd op een vaste tekenreeks, met variabelen.
CREATE ASSEMBLY
biedt geen ondersteuning voor het laden van assembly's met meerdere modules. SQL Server zoekt ook naar afhankelijke assembly's van deze assembly op dezelfde locatie en uploadt ze ook met dezelfde eigenaar als de assembly op het hoofdniveau. Als deze afhankelijke assembly's niet worden gevonden en deze nog niet zijn geladen in de huidige database, CREATE ASSEMBLY
mislukt het. Als de afhankelijke assembly's al in de huidige database zijn geladen, moet de eigenaar van deze assembly's hetzelfde zijn als de eigenaar van de zojuist gemaakte assembly.
Important
Azure SQL Database & Azure SQL Managed Instance biedt geen ondersteuning voor het maken van een assembly op basis van een bestand.
<client_assembly_specifier>
kan niet worden opgegeven als de aangemelde gebruiker wordt geïmiteerd.
<assembly_bits>
De lijst met binaire waarden waaruit de assembly en de afhankelijke assembly's bestaan. De eerste waarde in de lijst wordt beschouwd als de assembly op hoofdniveau. De waarden die overeenkomen met de afhankelijke assembly's kunnen in elke volgorde worden opgegeven. Waarden die niet overeenkomen met afhankelijkheden van de hoofdassembly, worden genegeerd.
Note
Deze optie is niet beschikbaar in een ingesloten database.
varbinary_literal
A varbinary literal.
varbinary_expression
An expression of type varbinary.
PERMISSION_SET { SAFE | EXTERNAL_ACCESS | ONVEILIG }
Hiermee geeft u een set codetoegangsmachtigingen op die aan de assembly worden verleend wanneer deze worden geopend door SQL Server. Als dit niet is opgegeven, SAFE
wordt deze toegepast als de standaardwaarde.
De PERMISSION_SET
optie wordt beïnvloed door de serverconfiguratie: strikte beveiligingsoptie clr . Wanneer clr strict security
deze optie is ingeschakeld, worden alle assembly's behandeld als UNSAFE
.
We adviseren SAFE
te gebruiken.
SAFE
is de meest beperkende machtigingenset. Code die wordt uitgevoerd door een assembly met SAFE
machtigingen heeft geen toegang tot externe systeembronnen, zoals bestanden, het netwerk, omgevingsvariabelen of het register.
EXTERNAL_ACCESS
stelt assembly's in staat om toegang te krijgen tot bepaalde externe systeembronnen, zoals bestanden, netwerken, omgevingsvariabelen en het register.
UNSAFE
maakt assembly's onbeperkte toegang tot resources mogelijk, zowel binnen als buiten een exemplaar van SQL Server. Code die vanuit een UNSAFE
assembly wordt uitgevoerd, kan onbeheerde code aanroepen.
SAFE
is de aanbevolen machtigingsinstelling voor assembly's die reken- en gegevensbeheertaken uitvoeren zonder toegang te krijgen tot resources buiten een exemplaar van SQL Server.
Note
De EXTERNAL_ACCESS
opties en UNSAFE
opties zijn niet beschikbaar in een ingesloten database.
We raden u aan EXTERNAL_ACCESS
voor assembly's die toegang hebben tot resources buiten een exemplaar van SQL Server.
EXTERNAL_ACCESS
assembly's omvatten de betrouwbaarheids- en schaalbaarheidsbeveiliging van SAFE
assembly's, maar vanuit beveiligingsperspectief zijn ze vergelijkbaar met UNSAFE
assembly's. Code in EXTERNAL_ACCESS
assembly's wordt standaard uitgevoerd onder het SQL Server-serviceaccount en opent externe resources onder dat account, tenzij de code expliciet de aanroeper imiteert. Machtigingen voor het maken van EXTERNAL_ACCESS
assembly's moeten daarom alleen worden verleend aan aanmeldingen die worden vertrouwd om code uit te voeren onder het SQL Server-serviceaccount. Zie CLR-integratiebeveiliging voor meer informatie over imitatie.
UNSAFE
Als u opgeeft, kan de code in de assembly volledige vrijheid krijgen om bewerkingen uit te voeren in de SQL Server-procesruimte die mogelijk de robuustheid van SQL Server kan in gevaar brengen.
UNSAFE
assembly's kunnen het beveiligingssysteem van SQL Server of de algemene taalruntime ook onderbouwen.
UNSAFE
machtigingen mogen alleen worden verleend aan zeer vertrouwde assembly's. Only members of the sysadmin fixed server role can create and alter UNSAFE
assemblies.
For more information about assembly permission sets, see Design assemblies.
Beveiliging van codetoegang wordt niet meer ondersteund
CLR maakt gebruik van CAS (Code Access Security) in .NET Framework, dat niet meer wordt ondersteund als een beveiligingsgrens. Een CLR-assembly die is gemaakt met PERMISSION_SET = SAFE
kan mogelijk toegang krijgen tot externe systeembronnen, onbeheerde code aanroepen en sysadmin-bevoegdheden verkrijgen. In SQL Server 2017 (14.x) en latere versies verbetert de sp_configure
optie, strikte beveiliging, de beveiliging van CLR-assembly's.
clr strict security
is standaard ingeschakeld en behandelt SAFE
en EXTERNAL_ACCESS
assembly's alsof ze zijn gemarkeerd als UNSAFE
. De optie clr strict security
kan worden uitgeschakeld voor achterwaartse compatibiliteit, maar wordt niet aanbevolen.
We raden aan alle assembly's te ondertekenen met een certificaat of asymmetrische sleutel, waarbij een bijbehorende login UNSAFE ASSEMBLY
machtigingen heeft in de master
-database. SQL Server-beheerders kunnen ook assembly's toevoegen aan een lijst met assembly's, die de Database Engine moet vertrouwen. For more information, see sys.sp_add_trusted_assembly.
Remarks
CREATE ASSEMBLY
uploadt een assembly die eerder is gecompileerd als een .dll-bestand uit beheerde code voor gebruik binnen een exemplaar van SQL Server.
Wanneer deze optie is ingeschakeld, worden de PERMISSION_SET
opties in de CREATE ASSEMBLY
en ALTER ASSEMBLY
instructies genegeerd tijdens de uitvoeringstijd, maar blijven de PERMISSION_SET
opties behouden in metagegevens. Als u de optie negeert, worden bestaande code-instructies geminimaliseerd.
SQL Server staat het registreren van verschillende versies van een assembly met dezelfde naam, cultuur en openbare sleutel niet toe.
Wanneer u probeert toegang te krijgen tot de assembly die is opgegeven in <client_assembly_specifier>
SQL Server, wordt de beveiligingscontext van de huidige Windows-aanmelding geïmiteerd. Als <client_assembly_specifier>
u een netwerklocatie (UNC-pad) opgeeft, wordt de imitatie van de huidige aanmelding niet overgedragen naar de netwerklocatie vanwege delegeringsbeperkingen. In dit geval wordt toegang gemaakt met behulp van de beveiligingscontext van het SQL Server-serviceaccount. Zie Referenties (Database Engine)voor meer informatie.
Besides the root assembly specified by assembly_name, SQL Server tries to upload any assemblies that are referenced by the root assembly being uploaded. Als een assembly waarnaar wordt verwezen, al naar de database is geüpload vanwege een eerdere CREATE ASSEMBLY
instructie, wordt deze assembly niet geüpload, maar is deze beschikbaar voor de hoofdassembly. Als een afhankelijke assembly niet eerder is geüpload, maar SQL Server het manifestbestand niet kan vinden in de bronmap, CREATE ASSEMBLY
retourneert een fout.
Als afhankelijke assembly's waarnaar wordt verwezen door de hoofdassembly nog niet in de database staan en impliciet samen met de hoofdassembly worden geladen, hebben ze dezelfde machtigingenset als de assembly op hoofdniveau. Als de afhankelijke assembly's moeten worden gemaakt met behulp van een andere machtigingenset dan de assembly op hoofdniveau, moeten ze expliciet worden geüpload voordat de assembly op hoofdniveau met de juiste machtigingenset wordt geüpload.
Assembly Validation
SQL Server scant de binaire assemblybestanden die door de CREATE ASSEMBLY
instructie zijn geüpload om de volgende controles te garanderen:
Het binaire assemblybestand is goed gevormd met geldige metagegevens en codesegmenten en de codesegmenten hebben geldige MSIL-instructies (Microsoft Intermediate Language).
De set systeemassembly's waarnaar wordt verwezen, is een van de volgende ondersteunde assembly's in SQL Server:
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
, enSystem.Core.dll
System.Xml.Linq.dll
. Er kan naar andere systeemassembly's worden verwezen, maar ze moeten expliciet worden geregistreerd in de database.Voor assembly's die zijn gemaakt met behulp van
SAFE
ofEXTERNAL ACCESS
machtigingensets:De assemblycode moet type-veilig zijn. Typeveiligheid wordt vastgesteld door de algemene taalruntime-verifier uit te voeren voor de assembly.
De assembly mag geen statische gegevensleden in de klassen bevatten, tenzij ze als alleen-lezen zijn gemarkeerd.
De klassen in de assembly kunnen geen finalizermethoden bevatten.
De klassen of methoden van de assembly mogen alleen worden voorzien van toegestane codekenmerken. Zie CLR-integratie: aangepaste kenmerken voor CLR-routines voor meer informatie.
Naast de vorige controles die worden uitgevoerd bij CREATE ASSEMBLY
uitvoeringen, zijn er extra controles die worden uitgevoerd tijdens de uitvoering van de code in de assembly:
Het aanroepen van bepaalde .NET Framework-API's waarvoor een specifieke machtiging voor codetoegang is vereist, kan mislukken als de machtigingenset van de assembly die machtiging niet bevat.
Voor
SAFE
enEXTERNAL_ACCESS
assembly's mislukt elke poging om .NET Framework-API's aan te roepen die zijn geannoteerd met bepaalde HostProtectionAttributes.
For more information, see Design assemblies.
Permissions
Hiervoor is CREATE ASSEMBLY
machtiging vereist.
Als PERMISSION_SET = EXTERNAL_ACCESS
dit is opgegeven, moet u toestemming op de server hebben EXTERNAL ACCESS ASSEMBLY
. Als PERMISSION_SET = UNSAFE
dit is opgegeven, moet u toestemming op de server hebben UNSAFE ASSEMBLY
.
De gebruiker moet de eigenaar zijn van assembly's waarnaar wordt verwezen door de assembly die moeten worden geüpload als de assembly's al in de database aanwezig zijn. To upload an assembly by using a file path, the current user must be a Windows authenticated login or a member of the sysadmin fixed server role. De Windows-aanmelding van de gebruiker die wordt uitgevoerd CREATE ASSEMBLY
, moet leesmachtigingen hebben voor de share en de bestanden die in de instructie worden geladen.
Machtigingen met clr strikte beveiliging
De volgende machtigingen zijn vereist voor het maken van een CLR-assembly wanneer CLR strict security
deze is ingeschakeld:
- De gebruiker moet over de
CREATE ASSEMBLY
machtiging beschikken - En een van de volgende voorwaarden moet ook waar zijn:
- De assembly wordt ondertekend met een certificaat of asymmetrische sleutel die een bijbehorende login heeft met de
UNSAFE ASSEMBLY
machtiging op de server. Het ondertekenen van de assemblage wordt aanbevolen. - De database heeft de
TRUSTWORTHY
eigenschap ingesteld opON
, en de database is het eigendom van een login met deUNSAFE ASSEMBLY
machtiging op de server. Deze optie wordt niet aanbevolen.
- De assembly wordt ondertekend met een certificaat of asymmetrische sleutel die een bijbehorende login heeft met de
For more information about assembly permission sets, see Design assemblies.
Examples
A. Een assembly maken op basis van een DLL
In het volgende voorbeeld wordt ervan uitgegaan dat de SQL Server Database Engine-voorbeelden zijn geïnstalleerd op de standaardlocatie van de lokale computer en dat de HelloWorld.csproj
voorbeeldtoepassing wordt gecompileerd. Zie Hello World Sample voor meer informatie.
CREATE ASSEMBLY HelloWorld
FROM '<system_drive>:\Program Files\Microsoft SQL Server\100\Samples\HelloWorld\CS\HelloWorld\bin\debug\HelloWorld.dll'
WITH PERMISSION_SET = SAFE;
Important
Azure SQL Database biedt geen ondersteuning voor het maken van een assembly van een bestand.
B. Een assembly maken op basis van assembly-bits
Vervang de voorbeeld-bits (die niet volledig of geldig zijn) door uw assembly-bits.
CREATE ASSEMBLY HelloWorld
FROM 0x4D5A900000000000
WITH PERMISSION_SET = SAFE;
Related content
- ALTER ASSEMBLY (Transact-SQL)
- DROP ASSEMBLAGE (Transact-SQL)
- CREËER FUNCTIE (Transact-SQL)
- PROCEDURE MAKEN (Transact-SQL)
- CREATE TRIGGER (Transact-SQL)
- CREATE TYPE (Transact-SQL)
- CREATE AGGREGATE (Transact-SQL)
- EVENTDATA (Transact-SQL)
- gebruiksscenario's en voorbeelden voor CLR-integratie (Common Language Runtime)