連載
» 2006年05月16日 00時00分 公開

SQL CLRの仕組みとメリットを理解しようSQL Server 2005を使いこなそう(4)(2/3 ページ)

[石橋潤一,株式会社システムインテグレータ]

SQL CLRのメリット

 SQL CLRはSQL ServerにCLRが統合されることによって誕生しました。CLRとは、Javaの仮想マシンのようにプラットフォーム間の違いを吸収し、さらにさまざまなクラスライブラリなどのサービスを提供する、.NETの根幹をなすフレームワークです。.NET Frameworkの登場以来、CLRを中心とした開発環境が着々と整いつつありますが、ストアドプロシージャの開発でもこれらの技術を利用可能とするために生まれたのがSQL CLRです。

 SQL CLRは従来の方式に比べてどういった点が優れているのか、具体的な利点を見てみましょう。

慣れ親しんだ言語でのデータベース・プログラミング

 SQL CLRでは、.NETをサポートするC#やVisual Basic .NETといった言語でストアドプロシージャやユーザー定義関数、トリガといったデータベース・プログラムを記述できます。これまでデータベース・プログラムを開発するにはTransact-SQLを利用する必要がありましたが、SQL CLRの登場により慣れ親しんだ言語での開発が可能となります。また、重要な点として、SQL CLRで作成したストアドプロシージャやユーザー定義関数を利用する際、クライアントはSQL CLRで作成されたことを意識する必要はなく、Transact-SQLで作成されたプログラムと同様の呼び出しを行うことができます。

開発生産性の向上

 開発者は.NET Frameworkで提供される膨大なクラスライブラリを利用することにより、ファイル操作や正規表現、バイナリ操作などこれまで困難だった数多くの処理を容易に実装できます。.NET Frameworkで提供されるクラスライブラリだけでなく、独自開発のライブラリ群の利用も容易に行えるため、コード資産の有効活用という点でも優れています。

 また、統合開発環境であるVisual Studio 2005では、コードの記述からデバッグ、SQL Serverへの配置までSQL CLRを完全にサポートしています。Visual Studio 2005を利用してSQL CLRの開発を行うことにより、デバッグやコーディング支援、プロジェクト単位での管理、コードの履歴管理など、生産性を向上させる各種機能の利用が可能となります。

パフォーマンスの向上

 SQL CLRはSQL Serverと同一プロセス上で実行されます。このため、外部プログラムからのアクセスに比べ、非常に高速な処理が可能となります。従来はパフォーマンスの向上を目指す場合、Transact-SQLを利用する必要がありましたが、SQL CLRにより、C#やVisual Basic .NETを利用してパフォーマンスの高いプログラムを作成できます。

 以上のように、SQL CLRは多くの面で優れた機能が提供されており、従来型の手法に比べ、開発生産性とパフォーマンスの両立を実現しています。また、C#やVisual Basic .NETなどの言語を利用した開発を行うことが可能となり、クライアントからサーバまで一貫した思想に基づいた開発を行えるため、プログラミング・モデルの一貫性を向上させることができます。プログラミング・モデルの一貫性は、コーディングだけでなく設計やテスト、運用など開発にかかわるさまざまなフェイズで生産性向上に寄与するでしょう。

SQL ServerへのSQL CLRの登録

 SQL CLRは.NETをサポートする各言語でコンパイルされたDLLファイル(アセンブリ)をSQL Serverへ登録することによって動作します。必要な作業としては、コンパイルによるDLLファイルの作成、DLLファイルの登録、登録したDLLファイルの呼び出し方法の登録、という3つの作業になります。

図2 SQL ServerへのSQL CLRの登録 図2 SQL ServerへのSQL CLRの登録

SQL CLRを利用するためには、コンパイルに加えて、DLLファイルの登録と呼び出し方法の登録が必要となる。


 SQL Serverへの登録により、Transact-SQLで作成したストアドプロシージャと同様に処理の呼び出しが可能となります。また、Visual Studio 2005では、SQL CLRを完全にサポートしており、コーディングからSQL Serverへの登録まで一連の作業をVisual Studioより行うことができます。

SQL CLRのセキュリティモデル

 SQL CLRではネットワークやレジストリ、ファイルなど多様なリソースへのアクセスが可能となりますが、無制限にアクセスを認めているわけではありません。SQL CLRではデータベースへ登録するアセンブリに対し「権限セット」を指定することが可能です。権限セットは

  • SAFE
  • EXTERNAL-ACCESS
  • UNSAFE

の3つから選択可能で、リソースへのアクセスを制限できます。

許可レベル 説明
SAFE 最も制限されたアクセス許可。ファイル、ネットワーク、レジストリなど外部リソースへのアクセスはできない
EXTERNAL-ACCESS SAFEで許可された範囲に加え、ファイルやディレクトリへの読み取り/書き込み、ネットワーク、イベントログ、レジストリなどへのアクセスを認める
UNSAFE EXTERNAL-ACCESSに加え、SQL CLRからアンマネージドコード(C++のコードなど)の呼び出しを認める
表2 SQL CLRのセキュリティモデル

 デフォルトではSAFEとなっており、多くのSQL CLRがSAFEでの利用となるはずです。外部へのアクセスを認める場合にはEXTERNAL-ACCESS設定を利用します。また危険を伴いますがWin32APIの呼び出しなどを必要とする場合はUNSAFE設定とします。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。