13

サーバーへの読み取りと書き込みを目的として書き込まれた古い 32-bit COMコンポーネントを移植しています。新しいソリューションが導入され、ユーザー関数 が使用されます。VB6Active DirectoryC#SQL CLR

展開しようとしているアセンブリにSQL Serverは、への参照が含まれていますSystem.DirectoryServices。プロジェクトはエラーなしでコンパイルされますSQL Serverが、次のエラーのため、アセンブリをに配置できません:

Error: Assembly 'system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.' was not found in the SQL catalog.

System.DirectoryServicesSQL Serverに登録するための正しい手順は何ですか?

4

4 に答える 4

7

他の回答から提供された情報は、私を解決策に導きました。将来の参考のために私が思いついた手順は次のとおりです。

CREATE ASSEMBLY [System.DirectoryServices]
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll'
WITH PERMISSION_SET = UNSAFE
GO

上記のステートメントを初めて実行したときに、次のエラーが発生しました。

アセンブリ 'System.DirectoryServices' の CREATE ASSEMBLY が失敗しました。これは、アセンブリ 'System.DirectoryServices' が PERMISSION_SET = UNSAFE に対して承認されていないためです。アセンブリは、次のいずれかに該当する場合に承認されます。データベース所有者 (DBO) に UNSAFE ASSEMBLY 権限があり、データベースに TRUSTWORTHY データベース プロパティがオンになっている。または、アセンブリは、UNSAFE ASSEMBLY アクセス許可を持つ対応するログインを持つ証明書または非対称キーで署名されています。

CREATE ASSEMBLY ステートメントをエラーなしで実行するには、まず次のように TRUSTWORTHY ON にする必要がありました。

ALTER DATABASE DatabaseName SET TRUSTWORTHY ON
GO

TRUSTWORTHY が ON になると、コマンドはエラーなしで実行されましたが、次の恐ろしい警告が表示されました。

警告: Microsoft .NET Framework アセンブリ 'system.directoryservices, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a, processorarchitecture=msil.' 登録しようとしているシステムは、SQL Server ホスト環境で完全にテストされておらず、サポートされていません。今後、このアセンブリまたは .NET Framework をアップグレードまたはサービスすると、CLR 統合ルーチンが機能しなくなる可能性があります。詳細については、SQL Server Books Online を参照してください。

System.DirectoryServices が SQL Server に適切に登録されているため、依存するカスタム SQL CLR アセンブリを問題なく展開/登録できるようになりました。

于 2010-06-02T18:51:30.107 に答える
6

ここの記事は役に立ちますか??

SP1 の新しい "SQLCLR 承認済み" アセンブリ

SQLCLR で安全に使用できる基本クラス ライブラリ アセンブリのセットについてよく尋ねられます。通常、「SQLCLR 手続き型コードでアセンブリ System.XYZ.dll を使用できますか」または「これを呼び出す独自のアセンブリをカタログ化しようとすると、「アセンブリ System.XYZ.dll が見つかりません」と表示されるのはなぜですか?最も頻繁に言及されているのは、System.DirectoryServices.dll (Active Directory サポート)、System.Management.dll (WMI サポート)、または System.Remoting.dll などです。これらを使用する唯一の方法は、それらに対して CREATE ASSEMBLY を実行することです。これには、PERMISSION_SET = UNSAFE の使用が含まれ、すべての依存関係をカタログ化します。

また、SQL Server CLR は考えられるすべてのアセンブリをサポートしているわけではありません。ここでリストを見つけてください。

その 2 番目の MSDN 記事からの 1 つのメモ:

サポートされていないライブラリ

サポートされていないライブラリは、マネージ ストアド プロシージャ、トリガー、ユーザー定義関数、ユーザー定義型、およびユーザー定義集計から引き続き呼び出すことができます。サポートされていないライブラリは、コードで使用する前に、CREATE ASSEMBLY ステートメントを使用して SQL Server データベースに登録する必要があります。サーバー上で登録および実行されているサポートされていないライブラリは、セキュリティと信頼性について確認およびテストする必要があります。

たとえば、System.DirectoryServices 名前空間はサポートされていません。コードから System.DirectoryServices.dll アセンブリを呼び出す前に、UNSAFE アクセス許可を使用して System.DirectoryServices.dll アセンブリを登録する必要があります。System.DirectoryServices 名前空間のクラスは SAFE または EXTERNAL_ACCESS の要件を満たしていないため、UNSAFE 権限が必要です。詳細については、「CLR 統合プログラミング モデルの制限」および「CLR 統合コード アクセス セキュリティ」を参照してください。

于 2010-06-02T16:14:23.207 に答える
0

追加したいのですが、非対称キー署名付き DLL を使用してアセンブリを登録しようとして 1 日を費やし、エラーで失敗しました。

. . . PERMISSION_SET = UNSAFE では許可されていません。の場合、アセンブリは認証されます。. .

CREATE ASYMMETRIC KEY AsyKeyName FROM executable FILE = 'C:\Program Files\...'

後で、 SQLサーバーがスペースを挟んだパスを好まないことがわかりました!!

于 2015-06-01T14:46:07.537 に答える
0

これは役に立ちますか: SQL Server でのアセンブリの作成?

正直なところ、私は SQL Server CLR の使用についてあまり知りません。これが役立つなら、私は自分自身を学ぶためにそれに固執します. =)

編集#1

この件に関する別の興味深いリンクを次に示します。

SQL Server 2005 CLR 統合とアセンブリ登録の問題

これが役立つことを願っています!

于 2010-06-02T16:04:37.803 に答える