Een assembly maken
van toepassing op:SQL Server-
Beheerde databaseobjecten, zoals opgeslagen procedures of triggers, worden gecompileerd en vervolgens geïmplementeerd in eenheden die een assembly worden genoemd. Beheerde DLL-assembly's moeten worden geregistreerd in SQL Server voordat de functionaliteit van de assembly kan worden gebruikt. Als u een assembly wilt registreren in een SQL Server-database, gebruikt u de CREATE ASSEMBLY
-instructie. In dit artikel wordt beschreven hoe u een assembly registreert in een database met behulp van de instructie CREATE ASSEMBLY
en hoe u de beveiligingsinstellingen voor de assembly opgeeft.
De INSTRUCTIE CREATE ASSEMBLY
De instructie CREATE ASSEMBLY
wordt gebruikt om een assembly in een database te maken. Hier volgt een voorbeeld:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
De FROM
-component geeft de padnaam op van de assembly die moet worden gemaakt. Dit pad kan een UNC-pad (Universal Naming Convention) of een fysiek bestandspad zijn dat lokaal is op de computer.
SQL Server staat het registreren van verschillende versies van een assembly met dezelfde naam, cultuur en openbare sleutel niet toe.
Het is mogelijk om assembly's te maken die verwijzen naar andere assembly's. Wanneer een assembly wordt gemaakt in SQL Server, worden in SQL Server ook de assembly's gemaakt waarnaar wordt verwezen door de assembly op hoofdniveau, als de assembly's waarnaar wordt verwezen nog niet in de database zijn gemaakt.
Databasegebruikers of gebruikersrollen krijgen machtigingen om assembly's in een database te maken en daarom eigenaar te zijn van assembly's. Als u assembly's wilt maken, moet de databasegebruiker of -rol de machtiging CREATE ASSEMBLY
hebben.
Een assembly kan alleen verwijzen naar andere assembly's als:
- De assembly waarnaar wordt verwezen, is eigendom van dezelfde gebruiker of rol.
- De assembly die wordt aangeroepen of waarnaar wordt verwezen, is gemaakt in dezelfde database.
Beveiliging opgeven bij het maken van assembly's
Wanneer u een assembly maakt in een SQL Server-database, kunt u een van de drie verschillende beveiligingsniveaus opgeven waarin uw code kan worden uitgevoerd: SAFE
, EXTERNAL_ACCESS
of UNSAFE
. Wanneer de instructie CREATE ASSEMBLY
wordt uitgevoerd, worden bepaalde controles uitgevoerd op de codeassembly, waardoor de assembly niet kan worden geregistreerd op de server.
SAFE
is de standaardmachtigingsset en werkt voor de meeste scenario's. Als u een bepaald beveiligingsniveau wilt opgeven, wijzigt u de syntaxis van de CREATE ASSEMBLY
-instructie als volgt:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
Het is ook mogelijk om een assembly te maken met de SAFE
machtigingenset door de derde regel van de vorige regel weg te laten.
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Wanneer code in een assembly wordt uitgevoerd onder de SAFE
machtigingenset, kan deze alleen berekeningen en gegevenstoegang binnen de server uitvoeren via de in-proces beheerde provider.
EXTERNAL_ACCESS en ONVEILIGe assembly's maken
EXTERNAL_ACCESS
scenario's waarin de code toegang nodig heeft tot resources buiten de server, zoals bestanden, netwerk, register en omgevingsvariabelen. Wanneer de server toegang heeft tot een externe resource, wordt de beveiligingscontext geïmiteert van de gebruiker die de beheerde code aanroept.
UNSAFE
codemachtiging is bedoeld voor situaties waarin een assembly niet verifieerbaar veilig is of aanvullende toegang tot beperkte resources vereist, zoals de Win32-API.
Als u een EXTERNAL_ACCESS
of UNSAFE
assembly in SQL Server wilt maken, moet aan een van de volgende twee voorwaarden worden voldaan:
De assembly is een sterke naam die is ondertekend of Authenticode is ondertekend met een certificaat. Deze sterke naam (of certificaat) wordt in SQL Server gemaakt als een asymmetrische sleutel (of certificaat) en heeft een bijbehorende aanmelding met
EXTERNAL ACCESS ASSEMBLY
machtiging (voor assembly's voor externe toegang) ofUNSAFE ASSEMBLY
machtiging (voor onveilige assembly's).De database-eigenaar (DBO) heeft
EXTERNAL ACCESS ASSEMBLY
(voorEXTERNAL ACCESS
assembly's) ofUNSAFE ASSEMBLY
-machtiging (voorUNSAFE
assembly's) en de database heeft de eigenschap TRUSTWORTHY-database ingesteld opON
.
De twee eerder vermelde voorwaarden worden ook gecontroleerd tijdens de laadtijd van de assembly (inclusief uitvoering). Aan ten minste één van de voorwaarden moet worden voldaan om de assembly te laden.
U wordt aangeraden de eigenschap TRUSTWORTHY-databaseeigenschap op een database niet is ingesteld op ON
alleen om CLR-code (Common Language Runtime) uit te voeren in het serverproces. In plaats daarvan raden we u aan een asymmetrische sleutel te maken op basis van het assemblybestand in de master
-database. Een aanmelding die is toegewezen aan deze asymmetrische sleutel, moet vervolgens worden gemaakt en de aanmelding moet worden verleend EXTERNAL ACCESS ASSEMBLY
of UNSAFE ASSEMBLY
machtiging.
In de volgende Transact-SQL instructies worden de stappen uitgevoerd die nodig zijn om een asymmetrische sleutel te maken, een aanmelding toe te wijzen aan deze sleutel en vervolgens EXTERNAL_ACCESS
machtiging voor de aanmelding te verlenen. U moet de volgende Transact-SQL instructies uitvoeren voordat u de CREATE ASSEMBLY
-instructie uitvoert.
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
Notitie
U moet een nieuwe aanmelding maken om te koppelen aan de asymmetrische sleutel. Deze aanmelding wordt alleen gebruikt om machtigingen te verlenen. Het hoeft niet te worden gekoppeld aan een gebruiker of moet worden gebruikt in de toepassing.
Als u een EXTERNAL ACCESS
-assembly wilt maken, moet de maker EXTERNAL ACCESS
machtiging opgeven bij het maken van de assembly:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
In de volgende Transact-SQL instructies worden de stappen uitgevoerd die nodig zijn om een asymmetrische sleutel te maken, een aanmelding toe te wijzen aan deze sleutel en vervolgens UNSAFE
machtiging voor de aanmelding te verlenen. U moet de volgende Transact-SQL instructies uitvoeren voordat u de CREATE ASSEMBLY
-instructie uitvoert.
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
Als u wilt opgeven dat een assembly wordt geladen met UNSAFE
machtiging, geeft u de UNSAFE
machtigingenset op bij het laden van de assembly in de server:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
Zie CLR-integratiebeveiligingvoor meer informatie over de machtigingen voor elk van de instellingen.