Megosztás a következőn keresztül:


CREATE ASSEMBLY (Transact-SQL)

Applies to:SQL ServerAzure SQL Managed Instance

Létrehoz egy felügyelt alkalmazásmodult, amely az osztály metaadatait és a felügyelt kódot tartalmazza objektumként az SQL Server egy példányában. A modulra való hivatkozással közös nyelvi futtatókörnyezeti (CLR) függvények, tárolt eljárások, eseményindítók, felhasználó által definiált összesítések és felhasználó által definiált típusok hozhatók létre az adatbázisban.

Transact-SQL szintaxis konvenciók

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

A szerelvény neve. The name must be unique within the database and a valid identifier.

AUTHORIZATION owner_name

Megadja egy felhasználó vagy szerepkör nevét a szerelvény tulajdonosaként. 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. Ha nincs megadva, a tulajdonjog az aktuális felhasználónak lesz megadva.

<client_assembly_specifier>

Megadja a feltöltendő szerelvény helyének helyi elérési útját vagy hálózati helyét, valamint a szerelvénynek megfelelő jegyzékfájl nevét. <client_assembly_specifier> kifejezés lehet rögzített sztringként vagy rögzített sztringre kiértékelő kifejezésként, változókkal. CREATE ASSEMBLY nem támogatja a többmodulos szerelvények betöltését. Az SQL Server a szerelvény minden függő szerelvényét ugyanazon a helyen keresi, és a gyökérszintű szerelvény tulajdonosával együtt tölti fel őket. Ha ezek a függő szerelvények nem találhatók, és még nincsenek betöltve az aktuális adatbázisban, CREATE ASSEMBLY sikertelen lesz. Ha a függő szerelvények már betöltve vannak az aktuális adatbázisban, ezeknek a szerelvényeknek a tulajdonosának meg kell egyeznie az újonnan létrehozott szerelvény tulajdonosával.

Important

Az Azure SQL Database és a felügyelt Azure SQL-példány nem támogatja a szerelvény fájlból való létrehozását.

<client_assembly_specifier> nem adható meg, ha a bejelentkezett felhasználó megszemélyesítés alatt áll.

<assembly_bits>

A szerelvényt és a függő szerelvényeket alkotó bináris értékek listája. A lista első értéke a gyökérszintű szerelvény. A függő szerelvényeknek megfelelő értékek bármilyen sorrendben megadhatóak. A rendszer figyelmen kívül hagyja azokat az értékeket, amelyek nem felelnek meg a gyökérszerelvény függőségeinek.

Note

Ez a beállítás nem érhető el egy tartalmazott adatbázisban.

varbinary_literal

A varbinary literal.

varbinary_expression

An expression of type varbinary.

PERMISSION_SET { SAFE | EXTERNAL_ACCESS | NEM BIZTONSÁGOS }

Az SQL Server által elért kódhozzáférési engedélyek készletét adja meg a szerelvény számára. Ha nincs megadva, SAFE a rendszer alapértelmezettként alkalmazza.

Ezt PERMISSION_SET a beállítást a kiszolgáló konfigurációja befolyásolja: szigorú clr biztonsági beállítás. Ha clr strict security engedélyezve van, a rendszer minden szerelvényt UNSAFEa következőképpen kezel.

A SAFEhasználatát javasoljuk. SAFE a legkorlátozóbb engedélykészlet. A SAFE engedélyekkel rendelkező szerelvény által végrehajtott kód nem fér hozzá külső rendszererőforrásokhoz, például fájlokhoz, a hálózathoz, a környezeti változókhoz vagy a beállításjegyzékhez.

EXTERNAL_ACCESS lehetővé teszi a szerelvények számára, hogy hozzáférjenek bizonyos külső rendszererőforrásokhoz, például fájlokhoz, hálózatokhoz, környezeti változókhoz és a beállításjegyzékhez.

UNSAFE A szerelvények korlátlan hozzáférést biztosítanak az erőforrásokhoz az SQL Server egy példányán belül és kívül egyaránt. A szerelvényen belül UNSAFE futó kód meghívhatja a nem felügyelt kódot.

SAFE A számítási és adatkezelési feladatokat végző szerelvények ajánlott engedélybeállítása anélkül, hogy az SQL Server egy példányán kívül férnek hozzá az erőforrásokhoz.

Note

A EXTERNAL_ACCESS lehetőségek és UNSAFE a lehetőségek nem érhetők el egy tartalmazott adatbázisban.

Azt javasoljuk, hogy olyan szerelvényekhez használjunk EXTERNAL_ACCESS , amelyek az SQL Server egy példányán kívüli erőforrásokhoz férnek hozzá. EXTERNAL_ACCESS a szerelvények közé tartozik a szerelvények megbízhatósági és méretezhetőségi SAFE védelme, biztonsági szempontból azonban hasonlóak a szerelvényekhez UNSAFE . A szerelvényekben lévő EXTERNAL_ACCESS kód alapértelmezés szerint az SQL Server szolgáltatásfiókja alatt fut, és az adott fiókban lévő külső erőforrásokhoz fér hozzá, kivéve, ha a kód kifejezetten megszemélyesíti a hívót. Ezért csak azoknak a bejelentkezéseknek kell engedélyt adni a szerelvények létrehozására EXTERNAL_ACCESS , amelyek megbízhatóan futtatják a kódot az SQL Server szolgáltatásfiókban. További információ a megszemélyesítésről: CLR integrációs biztonság.

A beállítás UNSAFE lehetővé teszi, hogy a szerelvény kódjának teljes szabadsága olyan műveleteket hajt végre az SQL Server-folyamattérben, amelyek veszélyeztethetik az SQL Server robusztusságát. UNSAFE szerelvények az SQL Server vagy a közös nyelvi futtatókörnyezet biztonsági rendszerét is leállíthatják. UNSAFE engedélyeket csak nagy megbízhatóságú szerelvények számára lehet biztosítani. Only members of the sysadmin fixed server role can create and alter UNSAFE assemblies.

For more information about assembly permission sets, see Design assemblies.

A kódhozzáférés biztonsága már nem támogatott

A CLR a .NET-keretrendszerben a Code Access Securityt (CAS) használja, amely már nem támogatott biztonsági határként. Előfordulhat, hogy egy PERMISSION_SET = SAFE létrehozott CLR-szerelvény hozzáférhet külső rendszererőforrásokhoz, meghívhatja a nem felügyelt kódot, és sysadmin-jogosultságokat szerezhet be. Az SQL Server 2017 (14.x) és újabb verzióiban a sp_configure lehetőség, clr szigorú biztonsági, növeli a CLR-szerelvények biztonságát. A clr strict security alapértelmezés szerint engedélyezve van, és úgy kezeli a SAFE és EXTERNAL_ACCESS szerelvényeket, mintha UNSAFEjelölték volna őket. A clr strict security lehetőség letiltható a visszamenőleges kompatibilitás érdekében, de nem ajánlott.

Javasoljuk, hogy az összes összetevőt egy tanúsítvánnyal vagy aszimmetrikus kulccsal írja alá, amelyhez tartozik egy megfelelő jogosultsággal rendelkező bejelentkezés, amely UNSAFE ASSEMBLY engedélyt kapott az master adatbázisban. Az SQL Server rendszergazdái könyvtárakat is hozzáadhatnak egy listához, amelyekben az adatbázismotornak meg kell bíznia. For more information, see sys.sp_add_trusted_assembly.

Remarks

CREATE ASSEMBLY Feltölt egy korábban .dll fájlként lefordított szerelvényt felügyelt kódból az SQL Server egy példányán belüli használatra.

Ha engedélyezve van, a PERMISSION_SET opció az CREATE ASSEMBLY és ALTER ASSEMBLY utasításokban futásidőben figyelmen kívül marad, de a PERMISSION_SET opciók megmaradnak a metaadatokban. A beállítás figyelmen kívül hagyása minimálisra csökkenti a meglévő kódkivonatok feltörését.

Az SQL Server nem engedélyezi a szerelvény különböző verzióinak regisztrálását ugyanazzal a névvel, kultúrával és nyilvános kulccsal.

A megadott <client_assembly_specifier>szerelvény elérésekor az SQL Server megszemélyesíti az aktuális Windows-bejelentkezés biztonsági környezetét. Ha <client_assembly_specifier> hálózati helyet (UNC-elérési utat) ad meg, az aktuális bejelentkezés megszemélyesítése nem lesz továbbítva a hálózati helyre a delegálási korlátozások miatt. Ebben az esetben a hozzáférés az SQL Server szolgáltatásfiók biztonsági környezetével történik. További információ: hitelesítő adatok (adatbázismotor).

Besides the root assembly specified by assembly_name, SQL Server tries to upload any assemblies that are referenced by the root assembly being uploaded. Ha egy hivatkozott szerelvény egy korábbi CREATE ASSEMBLY utasítás miatt már fel van töltve az adatbázisba, a rendszer nem tölti fel ezt a szerelvényt, hanem elérhető a gyökérszerelvény számára. Ha egy függő szerelvényt korábban nem töltöttek fel, de az SQL Server nem találja a jegyzékfájlt a forráskönyvtárban, CREATE ASSEMBLY hibát ad vissza.

Ha a gyökérszerelvény által hivatkozott függő szerelvények még nincsenek az adatbázisban, és implicit módon vannak betöltve a gyökérszerelvényrel együtt, ugyanazzal az engedélykészlettel rendelkeznek, mint a gyökérszintű szerelvény. Ha a függő szerelvényeket a gyökérszintű szerelvénytől eltérő engedélykészlettel kell létrehozni, azokat kifejezetten a gyökérszintű szerelvény előtt kell feltölteni a megfelelő engedélykészlettel.

Assembly Validation

Az SQL Server megvizsgálja az utasítás által CREATE ASSEMBLY feltöltött szerelvény bináris fájljait a következő ellenőrzések garantálása érdekében:

  • A szerelvény bináris fájlja jól formázott érvényes metaadatokkal és kódszegmensekkel, a kódszegmensek pedig érvényes Microsoft Intermediate Language (MSIL) utasításokkal rendelkeznek.

  • A hivatkozott rendszerszerelvények a következő támogatott szerelvények egyike az SQL Serverben: Microsoft.VisualBasic.dll, , mscorlib.dll, System.Data.dll, CustomMarshallers.dllMicrosoft.VisualC.dllSystem.Xml.dllSystem.dll, System.Web.Services.dllSystem.Data.SqlXml.dllSystem.Security.dllSystem.Core.dllés .System.Xml.Linq.dll Más rendszerszerelvényekre is hivatkozhat, de kifejezetten regisztrálni kell őket az adatbázisban.

  • A használatával SAFE vagy EXTERNAL ACCESS engedélykészletekkel létrehozott szerelvények esetén:

    • A szerelvény kódjának típusbiztosnak kell lennie. A típusbiztonság a közös nyelvi futtatókörnyezet ellenőrzőjének a szerelvényen való futtatásával jön létre.

    • A szerelvény nem tartalmazhat statikus adattagokat az osztályaiban, kivéve, ha írásvédettként vannak megjelölve.

    • A szerelvény osztályai nem tartalmazhatnak véglegesítő metódusokat.

    • A szerelvény osztályait vagy metódusait csak engedélyezett kódattribútumokkal szabad jegyzetekkel ellátni. További információ: CLR-integráció: egyéni attribútumok CLR-rutinokhoz.

A végrehajtáskor CREATE ASSEMBLY végrehajtott korábbi ellenőrzések mellett további ellenőrzések is vannak, amelyeket a kód végrehajtási idején hajtanak végre a szerelvényben:

  • Bizonyos ,NET-keretrendszer API-k meghívása, amelyekhez adott kódhozzáférési engedély szükséges, meghiúsulhat, ha a szerelvény engedélykészlete nem tartalmazza ezt az engedélyt.

  • EXTERNAL_ACCESS Az SAFE egyes HostProtectionAttributes-okkal jegyzett .NET-keretrendszer API-k meghívása sikertelen.

For more information, see Design assemblies.

Permissions

CREATE ASSEMBLY engedélyre van szükség.

Ha PERMISSION_SET = EXTERNAL_ACCESS meg van adva, engedélyre van szükség EXTERNAL ACCESS ASSEMBLY a kiszolgálón. Ha PERMISSION_SET = UNSAFE meg van adva, engedélyre van szükség UNSAFE ASSEMBLY a kiszolgálón.

A felhasználónak kell lennie minden olyan szerelvények tulajdonosának, amelyekre a szerelvény hivatkozik, amelyet fel kell tölteni, ha a szerelvények már léteznek az adatbázisban. 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. A végrehajtott CREATE ASSEMBLY felhasználó Windows-bejelentkezésének olvasási engedéllyel kell rendelkeznie a megosztáshoz és az utasításba betöltött fájlokhoz.

Szigorú biztonságú CLR-engedélyek

Ha engedélyezve van, a következő engedélyek szükségesek a CLR-szerelvény CLR strict security létrehozásához:

  • A felhasználónak rendelkeznie kell az CREATE ASSEMBLY engedéllyel
  • És az alábbi feltételek egyikének is igaznak kell lennie:
    • A szerelvény egy tanúsítvánnyal vagy aszimmetrikus kulccsal van aláírva, amelyhez tartozik egy olyan bejelentkezés, amely rendelkezik UNSAFE ASSEMBLY engedéllyel a kiszolgálón. Ajánlott aláírni a szerelvényt.
    • Az adatbázis tulajdonsága a TRUSTWORTHY értékre van beállítva, és az adatbázis tulajdonosa egy bejelentkezés, amely rendelkezik a ON engedéllyel a kiszolgálón. Ez a beállítás nem ajánlott.

For more information about assembly permission sets, see Design assemblies.

Examples

A. Szerelvény létrehozása DLL-ből

Az alábbi példa feltételezi, hogy az SQL Server adatbázismotor-mintái a helyi számítógép alapértelmezett helyén vannak telepítve, és a HelloWorld.csproj mintaalkalmazás fordítása megtörténik. További információ: Hello World Sample.

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

Az Azure SQL Database nem támogatja a szerelvény fájlból való létrehozását.

B. Szerelvény létrehozása szerelvénybitekből

Cserélje le a mintabiteket (amelyek nem teljesek vagy érvényesek) a szerelvénybitekre.

CREATE ASSEMBLY HelloWorld
    FROM 0x4D5A900000000000
WITH PERMISSION_SET = SAFE;