これは権限の問題だと思いますが、見つけられません。
1つのサーバー(SQL Server 2016)にCLRのグループがあり、それらは正常に機能します。すべてがUNSAFEとマークされており、さまざまなタイプのファイルI/O(読み取り、書き込み、コピー、移動、名前変更など)を実行します。 SSMSを介して、または同じように簡単にジョブから実行できます。
別のサーバー(SQL Server 2016も)にインストールする必要があります。元のVisual Studioプロジェクトを使用して、新しいサーバーに展開しました。 SSMSに表示されます。その部分はうまく見えます。
SSMSから実行しようとすると、次のエラーが発生します。「パス「渡されたパス」へのアクセスが拒否されました。」
WindowsログインでSSMSにログインしています。データベースへのアクセス許可があります。dboです。私はサーバーの管理者です。ファイルシステムで権限を持っています。
他に何が欠けているのでしょうか?
データベースへのアクセス許可があります。dboです。私はサーバーの管理者です。ファイルシステムで権限を持っています。
通常、それは重要ではありません。あなた(またはSQLCLRメソッドをコーディングした人)が偽装を実装していない限り、外部操作に使用されるセキュリティコンテキストは、SQL Serverを実行しているサービスアカウントのセキュリティコンテキストです(xp_cmdshell
の動作と同様)。アクセスしようとしているパスへのアクセス許可が必要なのは、そのアカウントです。
ファイルアクセス許可に関する完全性のために:
「DENY」は「GRANT」よりも優先されることに注意してください(SQL Server権限と同様)。
外部アクセスに使用されるアカウントに、フォルダやファイルへの必要な権限が実際にあるかどうかを判断するには、次の手順を実行します。
NT Service\MSSQLSERVER
)アクセスしようとしているパスのどこかにDENY権限がありますか?
[〜#〜] also [〜#〜]すべてのコードがファイルシステムに関するものである場合、おそらくアセンブリをUNSAFE
としてマークする必要はありません。代わりにEXTERNAL_ACCESS
にする必要があります。 UNSAFE
を必要とするファイルシステム操作は多すぎません。それらの1つは、固定ドライブのリストを取得していますが、他に何があるかわかりません。
SQLサーバーを実行しているサービスアカウントがこれらのパスにアクセスできることを確認します。
これは、実際にディスク上のファイルと対話するアカウントになります。
上記のすべての方法を実行したが、機能しなかった場合。これまでの私の経験から、SSMSをAdministratorとして開こうとするかもしれません。