SQL Server CLRのサードパーティDLL
-
16-10-2019 - |
質問
SQL Server CLRのトリガーC#コードでサードパーティのDLLを使用する必要があります
しかし、参照を追加しようとすると、SQL ServerからいくつかのDLLが表示されるだけです。
どうすれば追加できますか サードパーティDLL SQL Serverに?
解決
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構成のアプリケーションセキュリティです。
- アセンブリを登録することを好みます
SAFE
, 、例外的な状況でのみ使用する必要がありますEXTERNAL_ACCESS
またUNSAFE
. - フルトラストCLR(つまり、SQL ServerがホストするCLRではなく)でできる限りのことをできるとは思わないでください-SQLCLRはサンドボックスランタイムです。
- ASのように動的にアセンブリをロードしようとしないでください
Assembly.Load()
意図的に制限されています。 - 使用する予定がある場合は、サードパーティライブラリに公開キーに署名されていることを確認する必要がある場合があります
UNSAFE
. - コード実行は、SQL Serverを実行しているサービスのIDのコンテキストで実行されます(私は思う!)
- ホストされたアセンブリから作成されたデータベースアクセス(例:
context connection = true;
)接続されたユーザーのコンテキストで実行されるため、ライブラリがデータにアクセスできるアクセスを確認する必要があります。
他のヒント
Visual StudioからSQL CLRアセンブリをインストールする代替案について尋ねていると思います。
Visual Studioにコードを使用することは必要ありません。
CLRデータベースオブジェクトの展開 MSDNについては、SQLステートメントや展開スクリプトなどのオプションを詳しく説明しています。
私は非常に大きなサードパーティDLLを使用して、Webページを撮影し、PDFに変換します。
PDFはファイル共有に保存され、データベースは場所とタイプについて更新されます。
これは3段階のプロセスです。
サードパーティのDLLを使用してPDFを作成し、URLとFilePathをパラメーターとして受け入れ、PDFサイズとページ数を返すコンソールアプリを作成します。
サーバー上のコンソールアプリを呼び出すCLRストアドプロシージャを作成します
これをすべて1つのストアドプロシージャにラップして、CLRアプリを呼び出してPDFを作成し、メタデータをデータベースに書き込みます。
私はこれが完璧ではないことを理解しており、トリガーの中でとてもクレイジーなことをしてはいけません!
CLRでサードパーティのDLLを使用することについて質問をして、他の人のためにここで言及するだけです。
私の希望は、CMD.exeコンソールをスピンオフしてサードパーティのDLLを実行することで、すべてを実行する代わりに、クラッシュする場合、SQL Serverに悪影響を与えることはありません。それが私が望むことです。
これが本当にバッドのアプローチであるかどうか、そしてその理由をコメントしてください。