Aracılığıyla paylaş


SQL Server ile Doğrulanabilen Derlemeler Kullanma (C++/CLI)

Dinamik bağlantı kitaplıkları (DLL' ler) olarak paketlenmiş genişletilmiş saklı yordamlar, Visual C++ ile geliştirilen işlevler aracılığıyla SQL Server işlevselliğini genişletmek için bir yol sağlar. Genişletilmiş saklı yordamlar DLL'ler içinde işlev olarak uygulanır. İşlevlere ek olarak, genişletilmiş saklı yordamlar kullanıcı tanımlı türleri ve toplama işlevlerini (TOPLA veya ORT gibi) da tanımlayabilir.

İstemci genişletilmiş bir saklı yordam yürüttüğünde, SQL Server genişletilmiş saklı yordamla ilişkili DLL'yi arar ve DLL'yi yükler. SQL Server istenen genişletilmiş saklı yordamı çağırır ve belirtilen bir güvenlik bağlamı altında yürütür. Genişletilmiş saklı yordam daha sonra sonuç kümelerini geçirir ve parametreleri sunucuya geri döndürür.

SQL Server, SQL Server'a doğrulanabilir derlemeler yüklemenize olanak sağlamak için Transact-SQL'e (T-SQL) uzantılar sağlar. SQL Server izin kümesi, aşağıdaki güvenlik düzeyleriyle güvenlik bağlamını belirtir:

  • Kısıtlanmamış mod: Kodu kendi riskinizle çalıştırın; kodun doğrulanabilir tür güvenli olması gerekmez.

  • Güvenli mod: Doğrulanabilir tür güvenli kodu çalıştırın; /clr:safe ile derlenmiş.

Önemli

Visual Studio 2015 kullanım dışı bırakıldı ve Visual Studio 2017 doğrulanabilir projelerin /clr:pure ve /clr:safe oluşturulmasını desteklemez. Doğrulanabilir koda ihtiyacınız varsa kodunuzu C# olarak çevirmenizi öneririz.

SQL Server'a doğrulanabilir bir derleme oluşturmak ve yüklemek için CREATE ASSEMBLY ve DROP ASSEMBLY Transact-SQL komutlarını aşağıdaki gibi kullanın:

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

PERMISSION_SET komutu güvenlik bağlamını belirtir ve UNRESTRICTED, SAFE veya EXTENDED değerlerine sahip olabilir.

Ayrıca, bir sınıftaki yöntem adlarına bağlanmak için CREATE FUNCTION komutunu kullanabilirsiniz:

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

Örnek

Aşağıdaki SQL betiği (örneğin, "MyScript.sql" olarak adlandırılır) BIR derlemeyi SQL Server'a yükler ve bir sınıfın yöntemini kullanılabilir hale getirir:

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

SQL betikleri SQL Query Analyzer'da veya sqlcmd.exe yardımcı programıyla komut satırında etkileşimli olarak yürütülebilir. Aşağıdaki komut satırı MyServer'a bağlanır, varsayılan veritabanını kullanır, güvenilir bir bağlantı kullanır, MyScript.sql girişler ve çıkışlar MyResult.txt.

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

Ayrıca bkz.

Sınıflar ve Yapılar