2017-10-17 7 views
1

私はpermission_set = unsafeCLR機能publish.sqlファイル

アセンブリを展開するCLR機能を持っているが、公開鍵/秘密鍵ファイルで署名されて、私はassymtric keyを作成しました、そのasymmetric keyを使用してloginを作成しましたそのログインがunsafeアセンブリの許可を受けた場合

私がアセンブリを展開したいのであれば、./bin/debugにある.publish.sqlを実行すれば、CLRアセンブリ.dllを展開することができますか?すでに役得ものを設定している場合は、事前

+0

はい、パブリッシュ設定が正しく構成されている場合(つまり、CLRやsmfのような無視されないことを意味します) –

+0

@DmitrijKultasev SSMSでファイルを開き、実行をクリックするだけで簡単ですか?公開鍵/秘密鍵のどこにそれを伝える必要はありません。 –

+0

これを行う方法がわからない場合は、安全でないアセンブリを配備するべきではありません。あなたはおそらくそれらを必要としません。たとえば、* SQLCLRから電子メールを送信しようとしてはいけません。または、CSVファイルを読み込むために使用します。またはクエリを実行します。 SQL Serverエージェント、SSIS、外部ツールで実行する必要があるもの。無駄なRAMまたはCPUサイクルはサーバのメモリとCPUリソースから取られるため、パフォーマンスが損なわれます –

答えて

1

おかげで、私はあなたがちょうどそれがこの質問に答えていたとして自分自身を参照し、そのファイルを実行しようとしなかった理由として好奇心、右? ;-)しかし、はい、これらの3つのステップは、PERMISSION_SET = UNSAFEと記されたアセンブリを作成(および使用)するために必要なすべてです。

「公開」スクリプトは常に増分であることに注意してください。したがって、すべての状況で動作するデプロイメントスクリプトであるとはみなさないようにしてください。ビルドを行って変更を加えなかった場合は、オブジェクトを常に削除するオプションがない限り、アセンブリを再デプロイしません(データベース用のものはあるが、アセンブリ用のファイルはない)。 「作成」スクリプトは、生成するオプションを選択すると、常にすべてを削除して再作成します。

これが暗示されている場合にのみ、SSDTによって生成されたパブリッシュスクリプトは、デフォルトでプロジェクトの一部ではないサーバーレベルのオブジェクトで混乱することはありません(「プロジェクトの一部」は、 master DB)を加えた。したがって、完全なCreateスクリプトは、ログインまたは非対称キーを[master]から削除しません(少なくとも、削除しないでください)。しかし、必要に応じて、「ログインをドロップしない」および/または「非対称キーをドロップしない」というオプションがあります。

この質問はSQL Serverの古いバージョンに関するものです.SQL Server 2017はリリースされたばかりですが、アセンブリを展開するための規則が少し変更されています。この質問に記載されているメソッドは、最初に非対称キーを作成するときには機能しますが、今度はSAFEアセンブリでも必要です。

Stairway to SQLCLR Level 7: Development and Security

+0

"SSDTによって生成されたパブリッシュスクリプトはサーバーレベルのオブジェクトを混乱させることはありません"とは言えません。プロジェクトにログインなどを簡単に追加することができます。それを有効/無効にするオプションがあり、最も一般的には無効です –

+0

@DmitrijKultasev True、これは通常、これがSSDTの外部で処理されるため、通常は決して上がることはないので、SQLCLRプロジェクトに関して総称しています。しかし、私は明確にするために私の答えを更新しました。うまくいけば新しい言葉がより正確です。それを指摘してくれてありがとう。 –