- PR -

SQL CLRを使用して、外部アクセスアセンブリを、データベースに登録する際の質問

1
投稿者投稿内容
むーみん
常連さん
会議室デビュー日: 2005/06/23
投稿数: 41
投稿日時: 2008-02-18 14:23
いつもお世話になっております。

現在、Visual Basic 2005のデータベースプロジェクトを使用して、SQL CLRの使い方を勉強しています。
しかし、外部アクセス可能なアセンブリを作成することができない状態で行き詰ってしまいました。

参考にしたのは、以下の
http://www.atmarkit.co.jp/fdb/rensai/sqls05try06/sqls05try06_2.html
の記事と、Microsoftの自習書シリーズの以下の文書です。
http://download.microsoft.com/download/a/3/5/a354e691-55bf-4333-9780-bc62ba9c1e98/17SQL2005_SQLCLR.pdf

手順にしたがっていけば、データベースプロジェクトのプロパティのデータベースタブの、アクセスレベルがセーフ(既定)のプロジェクトは、簡単にストアドを作成することができました。実行もできました。
次に、そのアクセスレベルを外部に変更して、外部リソースにアクセス可能なアセンブリを作成しようとしました。

そのために、必要な手順として上記の記事に、以下の記述がありましたので、

引用:

アセンブリファイルより非対称キーを作成し、キーにひも付けられるログインを作成する。このログインに対し、利用する権限セットに合わせて「EXTERNAL ACCESS ASSEMBLY」または「UNSAFE ASSEMBLY」権限を与える



非対称キーをアセンブリファイルから作成するために、以下を参考にして、SQL Server Management Studioを使用して、

http://msdn2.microsoft.com/ja-jp/library/ms345106.aspx
コード:

USE master
GO

CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'ディレクトリパス\SQLCLRTest.dll'
CREATE LOGIN SQLCLRTestLogin FROM ASYMMETRIC KEY SQLCLRTestKey
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin
GO


と実行したのですが、エラーになってしまって、非対称キーが作成できません。エラー内容は、
引用:

メッセージ 15208、レベル 16、状態 1、行 2
証明書、非対称キー、または秘密キーのファイルが存在しないか、無効な形式です。


です。

データベースは、ローカルの、SQL Server 2005 Expressのインスタンスを使用しています。
Visual Basic のデータベースプロジェクトでアクセスレベルが「セーフ」なら作成&実行できる以下のストアドプロシージャです。
コード:

Partial Public Class StoredProcedures
<SqlProcedure()> _
Public Shared Sub CLRStoredProcedure()

' SQL Server との接続クラスを作成
Using cn As New SqlConnection("context connection=True")
cn.Open()

' SQL Server データベースに対して実行するSQL文を引数にしてSqlCommandを生成
Using cmd As New SqlCommand("select * from Product", cn)
Using dr As SqlDataReader = cmd.ExecuteReader
SqlContext.Pipe.Send(dr)
End Using
End Using
End Using
End Sub
End Class


これをプロジェクトのアクセスレベルを外部に変えてビルドしただけなので、他にもすべきことがあるのではないかと思うのですが、自習書にはそこまでの手順は記述されておらず、行き詰ってしまいました。

SQL CLRを使用したストアドプロシージャの開発ができるようになりたいと思っているのですが、最初につまづいてしまいまして、どなたか、解決方法または、参考になるページをご存知の方がいらっしゃいましたら、よろしくお願いいたします。

[ メッセージ編集済み 編集者: むーみん 編集日時 2008-02-18 14:26 ]
むーみん
常連さん
会議室デビュー日: 2005/06/23
投稿数: 41
投稿日時: 2008-02-18 18:50
解決しました。

プロジェクトのプロパティで「アセンブリの署名」にチェックを付けて、キーペアのファイルを作成してビルドしたら、先ほどの
コード:
USE master 
GO  
 
CREATE ASYMMETRIC KEY SQLCLRTestKey FROM EXECUTABLE FILE = 'ディレクトリパス\SQLCLRTest.dll'   


でエラーが起こらなくなりました。
とりあえず解決してみると、それは当たり前だというかんじでした。。。

アセンブリのセキュリティの管理など、色々不勉強で、また当たり前のことを聞いてしまったみたいですみませんでした。
1

スキルアップ/キャリアアップ(JOB@IT)