特集:後編 準備が整ったSQL Server 2005Visual Studio Magazine(1/3 ページ)

SQL Server 2005ベータ2では、製品リリース版を感じ取るに相応しいほとんどの機能がブラッシュアップされた。特に、T-SQL機能では、暗号化やWS-Securityサポートによる堅牢さが追求された。

» 2004年11月16日 18時29分 公開
[Roger Jennings,FTPOnline]

 Visual Studio Magazine誌は、米国で同種のVS専門誌ナンバーワンの発行部数を誇る。ITmediaでは、発行元FTP Onlineから翻訳権を取得。米国発でホットな話題をピックアップし、月に2つのテーマ特集を定期掲載していく。

 今回は、「準備が整ったSQL Server 2005 前編」に続く後編特集だ。Visual Studio 2005と同時期に出荷予定の「SQL Server 2005」のベータ2を元として新機能の注目すべき事項を解説しよう。

 この特集後編でのポイントは、T-SQLの扱いや新機能についてを始め、SQL Express、新たに提供されるクエリエディタ、SQLネイティブクライアント、HTTPエンドポイント作成、Service Broker利用のプログラミングなどだ。それぞれの基本事項は、前編で触れている。

 なお、後編内容は、これまでにSQL Serverによる開発に携わったことがある人が対象だ。

T-SQLの新機能を試してみる

 SQL Server 2005におけるT-SQLには、幾つかの新機能が搭載されている。構造化されたTRY〜CATCHブロックは、@@ERRORによるエラーハンドリングから解放してくれるものだ。

 また、PIVOTおよびUNPIVOT演算子は、クロス形式のレポートを作成するために、列と行を回転させる機能を持つ。ただし、(Accessの)JETエンジンのクロス形式レポートほどの柔軟性はない。たとえば、PIVOT演算子は、IN述部リストに固定化した列ヘッダを要求するのだ。

 「共通テーブル式」(CTE:Common table expressions)は、再帰的なクエリを可能とするインメモリのテーブルオブジェクト。このCTEは、クエリの実行が終わると自動的に削除される。

 TOP演算子では、定数以外に、int型の変数も受け付けるようになった。

 また、FROM句に設定できるTABLESAMPLE演算子は、TOP演算子に似た方法で使い、クエリから行をランダムに取り出したサンプリングを返す。たとえば、「FROM テーブル名 TABLESAMPLE(25 PERCENT」は、そのテーブルから25パーセント分のランダムな行を返すといった具合だ。

 ネストされたFOR XMLクエリは、親子関係をもつ階層化された入れ子のXML構造を返す。この際、TYPEディレクティブを指定すれば、内側のXMLデータ型だけを返すようになる。データ定義言語(DDL)では、CREATE、ALTER、DROPに対しても、トリガをかけられるようになった。

新機能のスナップショット分離レベルと暗号の仕組み

 新しく提供される「スナップショット分離レベル」は、データを読み込む時に、ロックを要求しないことで、高速なデータアクセスを提供するものだ。スナップショット分離レベルにおいては、それぞれのトランザクションが開始される際、コミットされたデータのスナップショットを受け取り、ほかのトランザクションによる変更が見えないように動作する。スナップショット分離レベルは、標準で有効になっていない。

 有効にするためには、まず、データベースに対し、「ALTER DATABASE データベース名 SET ALLOW_SNAPSHOT_ISOLATION ON」ステートメントを実行し、スナップショット分離レベルの利用を許可する。その後、T-SQLで「SET TRANSACTION_LEVEL SNAPSHOT」を実行する。ADO.NET 2.0であれば、「SqlConnection.BeginTransaction(IsolationLevel.Snapshot)」とすればよい。

 ベータ2で実現されているT-SQLでは、列レベルおよびセルレベルでの暗号化機能が提供されている。

 暗号化機能を使うには、「CREATE MASTER KEY ENCRYPTION BY PASSWORD='パスワード'」というステートメントを使う。すると、3DES暗号化方式で暗号化するためのマスターキーがデータベース上に作成されるのだ。

 CREATE MASTER KEYステートメントを実行すると、オブジェクトエクスプローラの[Database]―[Security]―[Symmetric Keys]ツリーに、「##MS_DatabaseMasterKey##」というアイテムが加えられる。SQL Server 2005のインスタンスをインストールする場合には、そのインスタンスごとに「サービスマスターキー」が生成される。

 マスターキーは、masterデータベースに同様にして保存される。サービスマスターキーは、インスタンスに含まれるデータベースのマスターキーを暗号化するのに用いられるのだ。

 また、「DUMP SERVICE MASTER KEY TO FILE」を使うと、サービスマスターキーをバックアップできる。バックアップしたサービスマスターキーは、のちに「LOAD SERVICE MASTER KEY」を使って復元できる。

 さらに「ALTER SERVICE MASTER KEY」は、サービスアカウントやパスワードを変更するときに使うものであり、サービスマスターキーと、それに依存するすべてのキーを再生成する。

 「CREATE ASYMMETRIC KEY」「CREATE SYMMETRIC KEY」「CREATE CERTIFICATE」(および、それぞれのALTERステートメント、DROPステートメント)は、データベースに格納されたキーと証明書を管理する。これらのステートメントを使えば、証明書の対称鍵やパスワード、対称鍵や非対称暗号鍵を暗号化できる。また、これらのステートメントの利用権限を、特定のユーザーに対して与えることもできる。

 証明書は標準ではデータベースのマスターキーで暗号化される。しかし代わりに、パスワードで暗号化するようにもできるのだ。

 EncryptByAsm、EncryptByCert、EncryptByKeyおよびEncryptByPassPhrase関数は、それぞれ、「非対称鍵」、「証明書」、「既存の対称鍵またはそのGUID」、「パスフレーズ」を使い、平文から暗号化したテキストへと変換するための関数である。

 ここで注意したいのは、非対称鍵を使ってテーブルの列を暗号化しないという点だ。そうしてしまうと、パフォーマンスが劣化する(訳注:非対称暗号化方式は、対称暗号化方式に比べて速度が遅い)。

 暗号化する元となる平文テキストは、リテラル文字列またはvarchar、nvarchar、char、nchar、wcharのいずれかの変数だ。暗号化の結果は、最大8000文字分のvarbinary型の値となる。先に示した「EncryptBy…」のそれぞれに対応する「DecryptBy…」の関数を用いると、暗号化された文字列から平文に戻すことができる。戻り値は、EncryptBy…の関数と同様に、varbinary型の値となる。

 暗号化の詳細については、Books Onlineで、「SQL Server Database Engine」をフィルタ条件として指定し、「encrypt」というキーワードで検索してほしい。

       1|2|3 次のページへ

© Copyright 2001-2005 Fawcette Technical Publications

注目のテーマ