Share via


SQL Server での確認可能なアセンブリの使用 (C++/CLI)

拡張ストアド プロシージャは、ダイナミック リンク ライブラリ (DLL) としてパッケージ化されており、Visual C++ で作成された関数を使用して SQL Server 機能を拡張する方法を備えています。 拡張ストアド プロシージャは、DLL 内で関数として実装されています。 拡張ストアド プロシージャは、関数だけではなく、ユーザー定義型および (SUM や AVG などの) 集計関数も定義できます。

クライアントが拡張ストアド プロシージャを実行すると、SQL Server は、拡張ストアド プロシージャに関連付けられた DLL を検索して、その DLL を読み込みます。 SQL Server は、要求された拡張ストアド プロシージャを呼び出し、指定されたセキュリティ コンテキストで実行します。 その後、拡張ストアド プロシージャは、サーバーに結果セットを渡して、パラメーターを返します。

SQL Server 2005 には、Transact-SQL (T-SQL) の拡張機能があります。この機能を使用すると、検証可能なアセンブリを SQL Server にインストールできます。 SQL Server アクセス許可セットは、次のセキュリティ レベルで、セキュリティ コンテキストを指定します。

  • 制限されていないモード : 問題が発生する可能性のあることを十分認識した上でコードを実行します。そのため、コードは、確認できるようにタイプ セーフにする必要はありません。

  • セーフ モード : 確認できるようにタイプ セーフなコードを実行します。そのため、/clr:safe でコンパイルされます。

セーフ モードの場合は、実行されるアセンブリを確認できるように、タイプ セーフにする必要があります。

検証可能なアセンブリを作成して SQL Server に読み込むには、Transact-SQL コマンドの CREATE ASSEMBLY および DROP ASSEMBLY を次のように使用します。

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

PERMISSION_SET コマンドを使用して、セキュリティ コンテキストを指定します。このコマンドには、UNRESTRICTED、SAFE、または EXTENDED という値を指定できます。

さらに、CREATE FUNCTION コマンドを使用して、クラスのメソッド名にバインドできます。次に例を示します。

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

使用例

次の (たとえば、"MyScript.sql" という名前の) SQL スクリプトでは、アセンブリを SQL Server に読み込み、クラスのメソッドを使用できるようにします。

-- 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 スクリプトは、SQL クエリ アナライザーで対話形式で実行するか、コマンド ラインで sqlcmd.exe ユーティリティを使用して実行できます。 次のコマンド ラインでは、MyServer に接続し、既定のデータベースを使用します。その後、信頼されている接続を使用して、MyScript.sql を入力し、MyResult.txt を出力します。

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

参照

参照

方法: /clr:safe に移行する (C++/CLI)

Classes, Structures, and Unions