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


Szerelvény létrehozása

Applies to:SQL Server

A felügyelt adatbázis-objektumokat, például a tárolt eljárásokat vagy eseményindítókat a rendszer lefordítja, majd üzembe helyezi egy szerelvénynek nevezett egységekben. A felügyelt DLL-szerelvényeket regisztrálni kell az SQL Serveren, mielőtt a szerelvény által biztosított funkció használható lenne. Ha szerelvényt szeretne regisztrálni egy SQL Server-adatbázisban, használja a CREATE ASSEMBLY utasítást. Ez a cikk azt ismerteti, hogyan regisztrálhat szerelvényt egy adatbázisban a CREATE ASSEMBLY utasítás használatával, és hogyan adhatja meg a szerelvény biztonsági beállításait.

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.

A CREATE ASSEMBLY utasítás

A CREATE ASSEMBLY utasítással szerelvényt hozhat létre egy adatbázisban. Íme egy példa:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll';

A FROM záradék megadja a létrehozandó szerelvény elérési útját. Ez az elérési út lehet univerzális elnevezési konvenciós (UNC) elérési út vagy a gép helyi fizikai fájlútvonala.

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.

Létrehozhat olyan szerelvényeket, amelyek más szerelvényekre hivatkoznak. Amikor egy szerelvényt létrehoz az SQL Serverben, az SQL Server létrehozza a gyökérszintű szerelvény által hivatkozott szerelvényeket is, ha a hivatkozott szerelvények még nem jönnek létre az adatbázisba.

Az adatbázis-felhasználók vagy a felhasználói szerepkörök jogosultságot kapnak az adatbázisokban lévő szerelvények létrehozására és így tulajdonlására. Szerelvények létrehozásához az adatbázis-felhasználónak vagy szerepkörnek rendelkeznie kell a CREATE ASSEMBLY engedéllyel.

Egy szerelvény csak akkor tud más szerelvényekre hivatkozni, ha:

  • A meghívott vagy hivatkozott szerelvény tulajdonosa ugyanaz a felhasználó vagy szerepkör.
  • A meghívott vagy hivatkozott szerelvény ugyanabban az adatbázisban lett létrehozva.

Biztonsági beállítások megadása szerelvények létrehozásakor

Ha szerelvényt hoz létre egy SQL Server-adatbázisba, három különböző biztonsági szint egyikét adhatja meg, amelyekben a kód futtatható: SAFE, EXTERNAL_ACCESSvagy UNSAFE. A CREATE ASSEMBLY utasítás futtatásakor bizonyos ellenőrzéseket végeznek a kódszerelvényen, ami miatt a szerelvény nem regisztrálható a kiszolgálón.

SAFE az alapértelmezett engedélykészlet, és a legtöbb forgatókönyv esetében működik. Egy adott biztonsági szint megadásához módosítsa a CREATE ASSEMBLY utasítás szintaxisát az alábbiak szerint:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll'
    WITH PERMISSION_SET = SAFE;

A SAFE engedélyekkel rendelkező szerelvényt is létrehozhat, ha kihagyja az előző sor harmadik sorát.

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll';

Amikor egy szerelvény kódja a SAFE engedélykészlet alatt fut, csak a feldolgozás alatt álló felügyelt szolgáltatón keresztül végezhet számításokat és adathozzáférést a kiszolgálón.

EXTERNAL_ACCESS és UNSAFE szerelvények létrehozása

EXTERNAL_ACCESS olyan forgatókönyveket kezel, amelyekben a kódnak hozzá kell férnie a kiszolgálón kívüli erőforrásokhoz, például fájlokhoz, hálózathoz, beállításjegyzékhez és környezeti változókhoz. Amikor a kiszolgáló egy külső erőforráshoz fér hozzá, megszemélyesíti a felügyelt kódot hívó felhasználó biztonsági környezetét.

UNSAFE kódengedély olyan helyzetekre vonatkozik, amikor egy szerelvény nem ellenőrizhetően biztonságos, vagy további hozzáférést igényel a korlátozott erőforrásokhoz, például a Win32 API-hoz.

Ha EXTERNAL_ACCESS vagy UNSAFE szerelvényt szeretne létrehozni az SQL Serverben, az alábbi két feltétel egyikének kell teljesülnie:

  1. A szerelvény erős, aláírt név, vagy tanúsítványsal aláírt Authenticode. Ez az erős név (vagy tanúsítvány) az SQL Serverben aszimmetrikus kulcsként (vagy tanúsítványként) jön létre, és megfelelő bejelentkezéssel rendelkezik EXTERNAL ACCESS ASSEMBLY engedéllyel (külső hozzáférési szerelvényekhez) vagy UNSAFE ASSEMBLY engedéllyel (nem biztonságos szerelvények esetén).

  2. Az adatbázis tulajdonosa (DBO) EXTERNAL ACCESS ASSEMBLY (EXTERNAL ACCESS szerelvényekhez) vagy UNSAFE ASSEMBLY (UNSAFE szerelvényekhez) engedéllyel rendelkezik, és az adatbázis TRUSTWORTHY adatbázistulajdonságONértékre van állítva.

A korábban felsorolt két feltételt a rendszer a szerelvény betöltési idején is ellenőrzi (beleértve a végrehajtást is). A szerelvény betöltéséhez legalább az egyik feltételnek teljesülnie kell.

Azt javasoljuk, hogy az adatbázis TRUSTWORTHY adatbázistulajdonság ne legyen ON csak a közös nyelvi futtatókörnyezeti (CLR-) kód futtatásához a kiszolgálói folyamatban. Ehelyett azt javasoljuk, hogy az master adatbázis szerelvényfájljából hozza létre az aszimmetrikus kulcsot. Ezután létre kell hozni egy ehhez az aszimmetrikus kulcshoz hozzárendelt bejelentkezést, és a bejelentkezésnek EXTERNAL ACCESS ASSEMBLY vagy UNSAFE ASSEMBLY engedélyt kell adni.

Az alábbi Transact-SQL utasítások végrehajtják az aszimmetrikus kulcs létrehozásához szükséges lépéseket, leképeznek egy bejelentkezést ehhez a kulcshoz, majd EXTERNAL_ACCESS engedélyt adnak a bejelentkezéshez. A CREATE ASSEMBLY utasítás futtatása előtt az alábbi Transact-SQL utasításokat kell futtatnia.

USE master;
GO

CREATE ASYMMETRIC KEY SQLCLRTestKey
     FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';

CREATE LOGIN SQLCLRTestLogin
    FROM ASYMMETRIC KEY SQLCLRTestKey;

GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO

Note

Létre kell hoznia egy új bejelentkezést az aszimmetrikus kulccsal való társításhoz. Ez a bejelentkezés csak engedélyek megadására szolgál. Nem kell hozzárendelni egy felhasználóhoz, és nem kell használni az alkalmazásban.

EXTERNAL ACCESS szerelvény létrehozásához a létrehozónak meg kell adnia EXTERNAL ACCESS engedélyt a szerelvény létrehozásakor:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS;

Az alábbi Transact-SQL utasítások végrehajtják az aszimmetrikus kulcs létrehozásához szükséges lépéseket, leképeznek egy bejelentkezést ehhez a kulcshoz, majd UNSAFE engedélyt adnak a bejelentkezéshez. A CREATE ASSEMBLY utasítás futtatása előtt az alábbi Transact-SQL utasításokat kell futtatnia.

USE master;
GO

CREATE ASYMMETRIC KEY SQLCLRTestKey
     FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';

CREATE LOGIN SQLCLRTestLogin
    FROM ASYMMETRIC KEY SQLCLRTestKey;

GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin;
GO

Ha meg szeretné adni, hogy egy szerelvény UNSAFE engedéllyel töltődik be, a UNSAFE engedélykészletet kell megadnia a szerelvény kiszolgálóra való betöltésekor:

CREATE ASSEMBLY SQLCLRTest
    FROM 'C:\MyDBApp\SQLCLRTest.dll'
    WITH PERMISSION_SET = UNSAFE;

További információ az egyes beállítások engedélyeiről: CLR integrációs biztonsági.