Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Applies to:SQL Server
Azure SQL Managed Instance
Skapar en hanterad programmodul som innehåller klassmetadata och hanterad kod som ett objekt i en instans av SQL Server. Genom att referera till den här modulen kan clr-funktioner (common language runtime), lagrade procedurer, utlösare, användardefinierade aggregeringar och användardefinierade typer skapas i databasen.
Transact-SQL syntaxkonventioner
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
Namnet på sammansättningen. The name must be unique within the database and a valid identifier.
AUTHORIZATION owner_name
Anger namnet på en användare eller roll som ägare av sammansättningen.
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. Om det inte anges ges ägarskap till den aktuella användaren.
<client_assembly_specifier>
Anger den lokala sökväg eller nätverksplats där sammansättningen som laddas upp finns och även det manifestfilnamn som motsvarar sammansättningen.
<client_assembly_specifier> kan uttryckas som en fast sträng eller ett uttryck som utvärderar till en fast sträng, med variabler.
CREATE ASSEMBLY stöder inte inläsning av flermodulsammansättningar. SQL Server letar också efter beroende sammansättningar av den här sammansättningen på samma plats och laddar även upp dem med samma ägare som rotnivåsammansättningen. Om dessa beroende sammansättningar inte hittas och de inte redan har lästs in i den aktuella databasen misslyckas CREATE ASSEMBLY . Om de beroende sammansättningarna redan har lästs in i den aktuella databasen måste ägaren till dessa sammansättningar vara samma som ägaren till den nyligen skapade sammansättningen.
Important
Azure SQL Database och Azure SQL Managed Instance har inte stöd för att skapa en sammansättning från en fil.
<client_assembly_specifier> kan inte anges om den inloggade användaren personifieras.
<assembly_bits>
Listan över binära värden som utgör sammansättningen och dess beroende sammansättningar. Det första värdet i listan anses vara sammansättningen på rotnivå. De värden som motsvarar de beroende sammansättningarna kan anges i valfri ordning. Alla värden som inte motsvarar beroenden för rotsammansättningen ignoreras.
Note
Det här alternativet är inte tillgängligt i en innesluten databas.
varbinary_literal
A varbinary literal.
varbinary_expression
An expression of type varbinary.
PERMISSION_SET { SAFE | EXTERNAL_ACCESS | OSÄKER }
Anger en uppsättning kodåtkomstbehörigheter som beviljas till sammansättningen när den används av SQL Server. Om det inte anges SAFE tillämpas som standard.
Alternativet PERMISSION_SET påverkas av serverkonfigurationen: clr strikt säkerhetsalternativ . När clr strict security är aktiverat behandlas alla sammansättningar som UNSAFE.
Vi rekommenderar att du använder SAFE.
SAFE är den mest restriktiva behörighetsuppsättningen. Kod som körs av en sammansättning med SAFE behörigheter kan inte komma åt externa systemresurser som filer, nätverk, miljövariabler eller registret.
EXTERNAL_ACCESS gör det möjligt för sammansättningar att komma åt vissa externa systemresurser, till exempel filer, nätverk, miljövariabler och registret.
UNSAFE möjliggör obegränsad åtkomst till resurser, både inom och utanför en instans av SQL Server. Kod som körs inifrån en UNSAFE sammansättning kan anropa ohanterad kod.
SAFE är den rekommenderade behörighetsinställningen för sammansättningar som utför beräknings- och datahanteringsuppgifter utan att komma åt resurser utanför en instans av SQL Server.
Note
Alternativen EXTERNAL_ACCESS och UNSAFE är inte tillgängliga i en innesluten databas.
Vi rekommenderar att du använder EXTERNAL_ACCESS för sammansättningar som har åtkomst till resurser utanför en instans av SQL Server.
EXTERNAL_ACCESS sammansättningar omfattar tillförlitlighet och skalbarhetsskydd för SAFE sammansättningar, men ur ett säkerhetsperspektiv liknar UNSAFE sammansättningar. Kod i EXTERNAL_ACCESS sammansättningar körs som standard under SQL Server-tjänstkontot och får åtkomst till externa resurser under det kontot, såvida inte koden uttryckligen personifierar anroparen. Därför bör behörighet att skapa EXTERNAL_ACCESS sammansättningar endast beviljas för inloggningar som är betrodda att köra kod under SQL Server-tjänstkontot. Mer information om personifiering finns i CLR-integreringssäkerhet.
Genom att UNSAFE ange aktiveras koden i sammansättningen fullständig frihet att utföra åtgärder i SQL Server-processutrymmet som potentiellt kan äventyra SQL Server-robustheten.
UNSAFE sammansättningar kan också potentiellt undergräva säkerhetssystemet för antingen SQL Server eller den vanliga språkkörningen.
UNSAFE behörigheter bör endast beviljas till mycket betrodda sammansättningar. Only members of the sysadmin fixed server role can create and alter UNSAFE assemblies.
For more information about assembly permission sets, see Design assemblies.
Kodåtkomstsäkerhet stöds inte längre
CLR använder Code Access Security (CAS) i .NET Framework, som inte längre stöds som en säkerhetsgräns. En CLR-sammansättning som skapats med PERMISSION_SET = SAFE kan komma åt externa systemresurser, anropa ohanterad kod och hämta sysadmin-privilegier. I SQL Server 2017 (14.x) och senare versioner förbättrar alternativet sp_configure, strikt säkerhet, säkerheten för CLR-sammansättningar.
clr strict security är aktiverat som standard och behandlar SAFE och EXTERNAL_ACCESS sammansättningar som om de hade markerats UNSAFE. Alternativet clr strict security kan inaktiveras för bakåtkompatibilitet, men rekommenderas inte.
Vi rekommenderar att du signerar alla sammansättningar med ett certifikat eller en asymmetrisk nyckel, med en motsvarande inloggning som har beviljats UNSAFE ASSEMBLY behörighet i master-databasen. SQL Server-administratörer kan också lägga till sammansättningar i en lista över sammansättningar som databasmotorn bör lita på. For more information, see sys.sp_add_trusted_assembly.
Remarks
CREATE ASSEMBLY laddar upp en sammansättning som tidigare kompilerats som en .dll fil från hanterad kod för användning i en instans av SQL Server.
När PERMISSION_SET är aktiverat ignoreras alternativen i CREATE ASSEMBLY- och ALTER ASSEMBLY-instruktionerna vid körning, men PERMISSION_SET-alternativen bevaras i metadata. Om du ignorerar alternativet minimeras befintliga kodinstruktioner.
SQL Server tillåter inte registrering av olika versioner av en sammansättning med samma namn, kultur och offentliga nyckel.
När du försöker komma åt sammansättningen som anges i <client_assembly_specifier>personifierar SQL Server säkerhetskontexten för den aktuella Windows-inloggningen. Om <client_assembly_specifier> anger en nätverksplats (UNC-sökväg) överförs inte personifieringen av den aktuella inloggningen till nätverksplatsen på grund av delegeringsbegränsningar. I det här fallet görs åtkomst med hjälp av säkerhetskontexten för SQL Server-tjänstkontot. Mer information finns i autentiseringsuppgifter (databasmotor).
Besides the root assembly specified by assembly_name, SQL Server tries to upload any assemblies that are referenced by the root assembly being uploaded. Om en refererad sammansättning redan har laddats upp till databasen på grund av en tidigare CREATE ASSEMBLY instruktion laddas inte den här sammansättningen upp utan är tillgänglig för rotsammansättningen. Om en beroende sammansättning inte laddades upp tidigare, men SQL Server inte kan hitta sin manifestfil i källkatalogen, CREATE ASSEMBLY returnerar ett fel.
Om några beroende sammansättningar som refereras av rotsammansättningen inte redan finns i databasen och implicit läses in tillsammans med rotsammansättningen, har de samma behörighetsuppsättning som rotnivåsammansättningen. Om de beroende sammansättningarna måste skapas med hjälp av en annan behörighetsuppsättning än sammansättningen på rotnivå, måste de laddas upp explicit före sammansättningen på rotnivå med lämplig behörighetsuppsättning.
Assembly Validation
SQL Server söker igenom de sammansättningsbinärfiler som laddas upp av -instruktionen CREATE ASSEMBLY för att garantera följande kontroller:
Sammansättningsbinärfilen är väl utformad med giltiga metadata och kodsegment, och kodsegmenten har giltiga MSIL-instruktioner (Microsoft Intermediate Language).
Den uppsättning systemsammansättningar som den refererar till är en av följande sammansättningar som stöds i SQL Server:
Microsoft.VisualBasic.dll,mscorlib.dll,System.Data.dll,System.dll,System.Xml.dll,CustomMarshallers.dllMicrosoft.VisualC.dll, ,System.Security.dll,System.Web.Services.dll, ,System.Data.SqlXml.dll,System.Core.dllochSystem.Xml.Linq.dll. Andra systemsammansättningar kan refereras till, men de måste uttryckligen registreras i databasen.För sammansättningar som skapats med hjälp av eller
SAFEEXTERNAL ACCESSbehörighetsuppsättningar:Monteringskoden ska vara typsäker. Typsäkerhet upprättas genom att köra den gemensamma språkkörningsverifieraren mot sammansättningen.
Sammansättningen får inte innehålla några statiska datamedlemmar i dess klasser om de inte är markerade som skrivskyddade.
Klasserna i sammansättningen får inte innehålla finalizermetoder.
Sammansättningsklasserna eller metoderna ska endast kommenteras med tillåtna kodattribut. Mer information finns i CLR-integrering: anpassade attribut för CLR-rutiner.
Förutom de tidigare kontroller som utförs när CREATE ASSEMBLY körs finns det extra kontroller som utförs vid körningen av koden i sammansättningen:
Att anropa vissa .NET Framework-API:er som kräver en specifik kodåtkomstbehörighet kan misslyckas om behörighetsuppsättningen för sammansättningen inte innehåller den behörigheten.
För
SAFEochEXTERNAL_ACCESSsammansättningar misslyckas alla försök att anropa .NET Framework-API:er som kommenteras med vissa HostProtectionAttributes.
For more information, see Design assemblies.
Permissions
Kräver CREATE ASSEMBLY behörighet.
Om PERMISSION_SET = EXTERNAL_ACCESS anges kräver EXTERNAL ACCESS ASSEMBLY behörighet på servern. Om PERMISSION_SET = UNSAFE anges kräver UNSAFE ASSEMBLY behörighet på servern.
Användaren måste vara ägare till alla sammansättningar som refereras av sammansättningen som ska laddas upp om sammansättningarna redan finns i databasen. 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. Windows-inloggningen för användaren som körs CREATE ASSEMBLY måste ha läsbehörighet för resursen och de filer som läses in i -instruktionen.
Behörigheter med strikt CLR-säkerhet
Följande behörigheter krävs för att skapa en CLR-sammansättning när CLR strict security är aktiverad:
- Användaren måste ha behörigheten
CREATE ASSEMBLY - Och ett av följande villkor måste också vara sant:
- Sammansättningen är signerad med ett certifikat eller en asymmetrisk nyckel som har en motsvarande inloggning med behörigheten
UNSAFE ASSEMBLYpå servern. Det rekommenderas att signera sammansättningen. - Databasen har egenskapen
TRUSTWORTHYinställd påON, och databasen ägs av en inloggning som har behörighetUNSAFE ASSEMBLYpå servern. Det här alternativet rekommenderas inte.
- Sammansättningen är signerad med ett certifikat eller en asymmetrisk nyckel som har en motsvarande inloggning med behörigheten
For more information about assembly permission sets, see Design assemblies.
Examples
A. Skapa en sammansättning från en DLL
I följande exempel förutsätts att SQL Server Database Engine-exemplen är installerade på den lokala datorns standardplats och HelloWorld.csproj att exempelprogrammet kompileras. Mer information finns i Hello World-exempel.
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 har inte stöd för att skapa en sammansättning från en fil.
B. Skapa en sammansättning från sammansättningsbitar
Ersätt exempelbitarna (som inte är fullständiga eller giltiga) med dina sammansättningsbitar.
CREATE ASSEMBLY HelloWorld
FROM 0x4D5A900000000000
WITH PERMISSION_SET = SAFE;
Related content
- ALTER ASSEMBLY (Transact-SQL)
- DROP ASSEMBLY (Transact-SQL)
- SKAPA FUNKTION (Transact-SQL)
- SKAPA PROCEDUR (Transact-SQL)
- SKAPA UTLÖSARE (Transact-SQL)
- SKAPA TYP (Transact-SQL)
- SKAPA AGGREGERING (Transact-SQL)
- EVENTDATA (Transact-SQL)
- användningsscenarier och exempel för CLR-integrering (Common Language Runtime)