共通言語ランタイムの統合

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL Managed Instance

MicrosoftSQL ServerとAzure SQL Managed Instanceを使用すると、ネイティブの共通言語ランタイム (CLR) 統合を SQL Server サーバー側モジュール (プロシージャ、関数、およびトリガー) として使用して、.net 言語の一部の機能を実装できます。 CLR では、言語間の統合、コード アクセス セキュリティ、オブジェクトの有効期間の管理、デバッグとプロファイルのサポートなどのサービスがマネージド コードに提供されます。 SQL Serverユーザーおよびアプリケーション開発者にとっての CLR 統合とは、ストアドプロシージャ、トリガー、ユーザー定義型、ユーザー定義関数 (スカラーおよびテーブル値)、およびユーザー定義集計関数を、 Microsoft Visual Basic .net や Visual C# などの任意の .NET Framework 言語を使用して記述できるようになったことを意味し Microsoft ます。 SQL Server には、.NET Framework Version 4 が付属します。

警告

CLR では、セキュリティ境界としてサポートされなくなった、.NET Framework のコード アクセス セキュリティ (CAS) が使用されます。 PERMISSION_SET = SAFE で作成された CLR アセンブリが、外部のシステム リソースにアクセスし、非管理対象コードを呼び出し、sysadmin 特権を取得できる場合があります。 SQL Server 2017 (14.x) 以降、CLR アセンブリのセキュリティを強化するために clr strict security という sp_configure オプションが導入されました。 clr strict security は既定で有効になり、SAFE および EXTERNAL_ACCESS アセンブリを UNSAFE とマークされている場合と同様に扱います。 clr strict security オプションは、旧バージョンとの互換性のために無効にできますが、これは推奨されません。 Microsoft では、master データベースで UNSAFE ASSEMBLY アクセス許可が付与されている対応するログインを含む証明書または非対称キーで、すべてのアセンブリに署名することをお勧めします。 詳しくは、「CLR の厳密なセキュリティ」をご覧ください。 SQL Server 管理者は、データベース エンジンが信頼するアセンブリのリストにアセンブリを追加することもできます。 詳細については、「sys.sp_add_trusted_assembly」を参照してください。

この6分間のビデオでは、Azure SQL Managed Instance で CLR を使用する方法について説明しています。

CLR モジュールを使用する場合

CLR 統合を使用すると、正規表現、外部リソース (サーバー、web サービス、データベース) にアクセスするためのコード、カスタム暗号化など、.NET Framework で使用できる複雑な機能を実装できます。サーバー側の CLR 統合の利点の一部を次に示します。

  • 優れたプログラミング モデル。 .NET Framework 言語では、以前 SQL Server の開発者が使用できなかった構造や機能が提供されるので、多くの点で Transact-SQL よりも優れています。 また、開発者は .NET Framework ライブラリの機能も使用できます。.NET Framework ライブラリには、プログラミングに関する問題を、迅速かつ効率的に解決する際に使用できる幅広いクラスのセットが用意されています。

  • 安全性とセキュリティの強化。 マネージコードは、データベースエンジンによってホストされる共通言語ランタイム環境で実行されます。 SQL Server ではこれを利用して、旧バージョンの SQL Server 拡張ストアド プロシージャに代わる、より安全で確実な機能を提供します。

  • データ型や集計関数を定義する機能。 ユーザー定義型とユーザー定義集計は、のストレージ機能とクエリ機能を拡張する2つの新しいマネージデータベースオブジェクトです SQL Server 。

  • 標準化された環境による効率的な開発。 データベース開発は、今後リリースされる Microsoft Visual Studio .NET 開発環境に統合されます。 開発者は、データベース オブジェクトやスクリプトの開発およびデバッグを行う際に、中間層またはクライアント層の .NET Framework コンポーネントやサービスを作成する場合と同じツールを使用できます。

  • パフォーマンスとスケーラビリティの強化。 .NET Framework 言語のコンパイル モデルと実行モデルは、多くの状況で、Transact-SQL を超える優れたパフォーマンスを提供します。

SQL Server 言語拡張は、データベースエンジンに近いランタイム用の別の実行環境を提供します。 SQL clr と SQL 言語拡張機能の違いの詳細については、「 SQL Server 言語拡張機能と SQL CLR の比較」を参照してください。

次の表に、このセクションの各トピックの一覧を示します。

CLR 統合の概要
CLR 統合を使用して構築できるオブジェクトの種類について説明します。 また、CLR 統合を使用してデータベースオブジェクトを構築するための要件についても確認します。

CLR 統合における新機能
このリリースの新機能について説明します。

CLR 統合のアーキテクチャ
CLR 統合の設計目標について説明します。

CLR 統合の有効化
CLR 統合を有効にする方法を説明します。

関連項目

.NET Framework のインストール( SQL Server のみ)
CLR 統合のパフォーマンス