これは今、2日間私を悩ませています。 EXTERNAL_ACCESSが必要なCLR spがあります。私はTRUSTWORTHYをONに設定して、私のdevボックスにVS2010経由でそれをデプロイできますが、実動サーバーにはしたくありません。私たちはAuthentiCode互換の証明書を購入しました。私はそれを使ってアセンブリに署名しようとしましたが、チェーン化のために失敗しましたので、指示書detailed here to strip out chaining from the certに従っています。署名付きCLRストアドプロシージャをSQLにインストールする具体的な手順は何ですか?
次へVSでアセンブリに署名しようとしましたが、「存在しないトークンを参照しようとしました」というエラーが発生しました。
コマンドラインに行き、いくつかのブロガーが推奨しているように、SignTool.exeを使用して、チェーン解除された証明書でアセンブリに署名しました。ユーティリティは、署名が成功したことを報告します。
私の開発ボックスのSQL Server(express 2008R2)にアセンブリをインポートします。最初にこの手順を本番サーバーに適用する必要があるため、TRUSTWORTHYをオフに設定してください。それから私は、これは次のエラーを取得します
CREATE ASSEMBLY SqlClrProcedures from 'c:\<snip>\SqlClrProcedures.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
を実行します。*組み立てのためのアセンブリを作成「SqlClrProcedures」アセンブリ「SqlClrProcedures」がPERMISSION_SET = EXTERNAL_ACCESSを許可されていないため失敗しました。データベース所有者(DBO)にEXTERNAL ACCESS ASSEMBLY権限があり、データベースにTRUSTWORTHYデータベースプロパティが存在する場合、アセンブリは許可されます。アセンブリがEXTERNAL ACCESS ASSEMBLY権限を持つ対応するログインを持つ証明書または非対称キーで署名されています。*
saとしてログインしました。 [OK]をので、私は、ユーザーを作成し、彼にデシベルの所有権を割り当てると、彼に外部からのアクセスを付与します。
GRANT EXTERNAL ACCESS Assembly to ClrLogin
が続いて上記と同じエラーが発生し
CREATE ASSEMBLY SqlClrProcedures AUTHORIZATION ClrLogin from 'c:\<snip>\SqlClrProcedures.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
を試してみてください。
dboにEXTERNAL ACCESS ASSEMBLYが割り当てられていますが、アセンブリに署名がありますが、対応するログインについての部分がわかりません。証明書のログインが必要ですか?
だけCREATE ASSEMBLYを乗り越えるためにTRUSTWORTHY ONに設定した場合アセンブリが細かいインポートされますが、私は、SPを実行すると、私はこのエラーを取得:
An error occurred in the Microsoft .NET Framework while trying to load assembly id 65573. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error:
System.IO.FileLoadException: Could not load file or assembly 'sqlclrprocedures, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An error relating to security occurred. (Exception from HRESULT: 0x8013150A)
System.IO.FileLoadException:
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)
ので、証明書が認識取得されていません表示されます。誰かが私が間違っていることを教えてもらえますか?
私が知る限り、証明書に署名するサポートはSQL CLRアセンブリにはありません。私は最終的に署名するためにStrong Nameを作成してインストールするようにしましたが、悪意のあるユーザーがそれを保持していれば証明書を取り消すことができないという明白な欠点があります。 – StuTheDog