SQL Server CLRのサードパーティdll


14

SQL Server CLRのトリガーc#コードでサードパーティのDLLを使用する必要があります

しかし、参照を追加しようとすると、SQL ServerからのDLLが表示されるだけです。

サードパーティのdllをSQL Server に追加するにはどうすればよいですか?


2
SQL CLRアセンブリを追加するのと同じ方法ですか?

回答:


14

SQL Serverに登録されているアセンブリへの参照のみを追加できます。登録されていない場合、「参照の追加」ダイアログには表示されません。

DLLを登録するために必要な手順がいくつかあります。まず、データベースを再構成する必要があります。

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

これが完了すると、SQL ServerはCLR対応になります。次に、アセンブリを登録する必要があります。

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

この最後のスクリプトが正しく実行されると、アセンブリが登録され、参照の追加ダイアログに表示されます。

ただし、考慮する必要があるのは、SQL Server CLR構成のアプリケーションセキュリティです。

  1. またはSAFEを使用する必要がある例外的な状況でのみ、アセンブリを登録することをお勧めします。EXTERNAL_ACCESSUNSAFE
  2. 完全信頼CLR(つまり、SQL ServerでホストされているCLRではない)でできることをすべてできるとは思わないでください。SQLCLRはサンドボックスランタイムです。
  3. Assembly.Load()意図的に制限されているため、アセンブリを動的にロードしようとしないでください。
  4. を使用する場合は、サードパーティライブラリが公開キーで署名されていることを確認する必要がありますUNSAFE
  5. 実行中のコードは、SQL Serverを実行しているサービスのIDのコンテキストで実行されます(と思います!)
  6. ホストされたアセンブリから(たとえば経由でcontext connection = true;)行われたデータベースアクセスは、接続されたユーザーのコンテキストで実行されるため、そのライブラリがデータにどのようなアクセス権を持っているかを確認する必要があります。

上記の4では、アセンブリに署名する必要があります。私はその部分を手に入れ、自己署名された指示を介してそれを行うことができました:geekswithblogs.net/ktegels/archive/2006/02/16/… しかし、秘密鍵を持っていないとき、つまり、アセンブリは信頼できる第三者によって作成および署名されましたか?上記のリンクでわかる限り、証明書の作成には秘密キーが必要です。それはこれを不可能にしているようですか?
ホルヘサンドヴァル

2
また、dbを信頼できるものとしてマークするのは危険です(「安全な」アセンブリのインストールには不要です)。信頼できるとは、外部/安全でないアクセス許可のアセンブリに署名する必要がある方法の1つですが、インストールされているCLRアセンブリが信頼されるため推奨されません
...-JorgeSandoval

5

Visual StudioからSQL CLRアセンブリをインストールする代替案について質問していると思います。

Visual Studioにコードを含める必要はありません。

MSDNでのCLRデータベースオブジェクトの展開では、SQLステートメントや展開スクリプトなどのオプションについて詳しく説明しています。


1

Webページを取得してPDFに変換する非常に大きなサードパーティDLLを使用します。

PDFはファイル共有に保存され、データベースの場所とタイプが更新されます。

これは3段階のプロセスです。

  1. サードパーティのDLLを使用してPDFを作成し、URLとFilePathをパラメーターとして受け入れ、PDFのサイズとページ数を返すコンソールアプリを作成します。

  2. サーバーでコンソールアプリを呼び出すCLRストアドプロシージャを作成する

  3. これをすべてCLRアプリを呼び出してPDFを作成する単一のストアドプロシージャにラップし、それに関するメタデータをデータベースに書き込みます。

私はこれが完璧ではないことを知っています、そしてあなたはトリガーの中でそんなにクレイジーなことをするべきではありません!

ここでは、サードパーティDLLをCLRで使用することについて質問がある他の人にのみ言及します。

私は、cmd.exeコンソールをスピンオフしてサードパーティDLLを実行することにより、すべてをインプロセスで実行するのではなく、クラッシュしてもSQL Serverに悪影響を及ぼさないことを期待しています。それが私が望んでいることです。

これが本当に悪いアプローチであるかどうか、そしてその理由をコメントしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.