Bagikan melalui


Menggunakan Rakitan yang Dapat Diverifikasi dengan SQL Server (C++/CLI)

Prosedur tersimpan yang diperluas, dikemas sebagai pustaka tautan dinamis (DLL), menyediakan cara untuk memperluas fungsionalitas SQL Server melalui fungsi yang dikembangkan dengan Visual C++. Prosedur tersimpan yang diperluas diimplementasikan sebagai fungsi di dalam DLL. Selain fungsi, prosedur tersimpan yang diperluas juga dapat menentukan jenis yang ditentukan pengguna dan fungsi agregat (seperti SUM atau AVG).

Ketika klien menjalankan prosedur tersimpan yang diperluas, SQL Server mencari DLL yang terkait dengan prosedur tersimpan yang diperluas dan memuat DLL. SQL Server memanggil prosedur tersimpan yang diperluas yang diminta dan menjalankannya di bawah konteks keamanan tertentu. Prosedur tersimpan yang diperluas kemudian meneruskan tataan hasil dan mengembalikan parameter kembali ke server.

SQL Server menyediakan ekstensi untuk Transact-SQL (T-SQL) untuk memungkinkan Anda menginstal rakitan yang dapat diverifikasi ke SQL Server. Set izin SQL Server menentukan konteks keamanan, dengan tingkat keamanan berikut:

  • Mode tidak terbatas: Jalankan kode dengan risiko Anda sendiri; kode tidak harus dapat diverifikasi jenis-aman.

  • Mode aman: Jalankan kode typeafe yang dapat diverifikasi; dikompilasi dengan /clr:safe.

Penting

Visual Studio 2015 tidak digunakan lagi dan Visual Studio 2017 tidak mendukung pembuatan proyek /clr:pure dan /clr:safe . Jika Anda memerlukan kode yang dapat diverifikasi, kami sarankan Anda menerjemahkan kode Anda ke C#.

Untuk membuat dan memuat rakitan yang dapat diverifikasi ke SQL Server, gunakan perintah Transact-SQL CREATE ASSEMBLY dan DROP ASSEMBLY sebagai berikut:

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

Perintah PERMISSION_SET menentukan konteks keamanan, dan dapat memiliki nilai UNRESTRICTED, SAFE, atau EXTENDED.

Selain itu, Anda dapat menggunakan perintah CREATE FUNCTION untuk mengikat nama metode di kelas:

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

Contoh

Skrip SQL berikut (misalnya, bernama "MyScript.sql") memuat rakitan ke SQL Server dan membuat metode kelas tersedia:

-- 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

Skrip SQL dapat dijalankan secara interaktif di SQL Query Analyzer atau di baris perintah dengan utilitas sqlcmd.exe. Baris perintah berikut tersambung ke MyServer, menggunakan database default, menggunakan koneksi tepercaya, input MyScript.sql, dan output MyResult.txt.

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

Lihat juga

Kelas dan Struktur