web-dev-qa-db-ja.com

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

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

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

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

14
AVEbrahimi

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_ACCESS_またはUNSAFEを使用する必要があります。
  2. Full-trust CLR(つまり、Sql ServerがホストするCLRではない)でできるすべてのことを実行できると期待しないでください。SQLCLRはサンドボックス化されたランタイムです。
  3. Assembly.Load()は意図的に制限されているため、動的にアセンブリを読み込んだりしないでください。
  4. UNSAFEを使用する予定がある場合は、サードパーティライブラリが公開鍵で署名されていることを確認する必要がある場合があります。
  5. SQL Serverを実行しているサービスのIDのコンテキストでコード実行が実行されます(私はそう思います!)
  6. ホストされたアセンブリから(たとえば、_context connection = true;_を介して)行われたデータベースアクセスは、接続されたユーザーのコンテキストで実行されるため、ライブラリがデータにどのようなアクセス権を持っているかを確認する必要があります。
15
Matthew Abbott

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

Visual Studioでコードを使用する必要はありません。

Deploying CLR Database Objects on MSDNで、SQLステートメントやデプロイメントスクリプトなどのオプションについて詳しく説明しています。

5
Oded

私は非常に大規模なサードパーティDLLを使用しています。これは、Webページを取得してPDFに変換します。

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

これは3ステップのプロセスです。

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

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

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

これは完璧ではないことを理解しています。決してトリガーの中でクレイジーなことをするべきではありません。

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

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

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

1
MikeTeeVee