Ellenőrizhető assembly-k használata az SQL Serverrel (C++/CLI)

A dinamikus csatolású kódtárakként (DLL-ként) csomagolt kiterjesztett tárolt eljárások lehetővé teszik az SQL Server funkcióinak kiterjesztését a Visual C++-tal kifejlesztett függvényekkel. A kiterjesztett tárolt eljárások függvényként implementálódnak a DLL-ekben. A függvények mellett a kiterjesztett tárolt eljárások felhasználó által definiált típusokat és összesítő függvényeket is definiálhatnak (például SZUM vagy AVG).

Ha egy ügyfél kiterjesztett tárolt eljárást hajt végre, az SQL Server megkeresi a kiterjesztett tárolt eljáráshoz társított DLL-t, és betölti a DLL-t. Az SQL Server meghívja a kért kiterjesztett tárolt eljárást, és végrehajtja egy megadott biztonsági környezetben. A kiterjesztett tárolt eljárás ezután átadja az eredményhalmazokat, és visszaadja a paramétereket a kiszolgálónak.

Az SQL Server bővítményeket biztosít a Transact-SQL (T-SQL) számára, amelyekkel ellenőrizhető szerelvényeket telepíthet az SQL Serverbe. Az SQL Server engedélykészlete a biztonsági környezetet határozza meg a következő biztonsági szintekkel:

  • Korlátlan mód: Kód futtatása saját felelősségre; a kódnak nem kell ellenőrizhetően típusbiztosnak lennie.

  • Biztonságos mód: Ellenőrizhető typesafe kód futtatása; a /clr:safe kapcsolóval fordítva.

Fontos

A Visual Studio 2015 elavult, és a Visual Studio 2017 nem támogatja a /clr:pure és /clr:biztonságos , ellenőrizhető projektek létrehozását. Ha ellenőrizhető kódra van szüksége, javasoljuk, hogy lefordítsa a kódot C#-ra.

Ellenőrizhető szerelvény SQL Serverbe való létrehozásához és betöltéséhez használja a CREATE ASSEMBLY és a DROP ASSEMBLY Transact-SQL parancsot az alábbiak szerint:

CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
  PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>

A PERMISSION_SET parancs határozza meg a biztonsági környezetet, és a korlátozás nélküli, a BIZTONSÁGOS vagy a KITERJESZTETT értékekkel rendelkezhet.

Emellett a CREATE FÜGGVÉNY paranccsal is kötést végezhet egy osztály metódusneveihez:

CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]

példa

A következő SQL-szkript (például "MyScript.sql") betölt egy szerelvényt az SQL Serverbe, és elérhetővé tesz egy osztály metódusát:

-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from
'c:\stockNoEA.dll'
with permission_set safe

-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go

-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go

Az SQL-szkriptek interaktívan végrehajthatók az SQL Query Analyzerben vagy a parancssorban a sqlcmd.exe segédprogrammal. A következő parancssor csatlakozik a MyServerhez, az alapértelmezett adatbázist használja, megbízható kapcsolatot használ, bemeneteket MyScript.sql és kimeneteket MyResult.txt.

sqlcmd -S MyServer -E -i myScript.sql -o myResult.txt

Lásd még

Osztályok és struktúrák