2009-03-19 13 views
1

SharePoint Server内のPageLayout内のascxでコードが実行され、リモートサーバー、つまりFile.Create( "\ servername \ sharename \ folder \ file.txt")上のファイルにアクセスしています。このコードは、web.configでCAS信頼がフルに設定されているSharePoint Webアプリケーション内で実行されます。 '\\サーバー名\共有名\フォルダ\ file.txtを' は拒否されたパスにSharePoint 2007のリモートファイルアクセスが拒否されました

System.UnauthorizedAccessException

アクセス - :File.Createは、次の例外がスローされます。

共有はフルコントロールのEveryoneに共有され、NTFSのアクセス許可はフルコントロールのEveryoneに設定されます。 Webアプリケーションのアプリケーションプールは、そのリソースにアクセスするための明示的なアクセス許可を持つドメインアカウントで実行されています(これは必要ではありません)。

リモートマシンでプロセスモニタを実行しましたが、サーバーにヒットが記録されていませんでした。これは、SharePointコードアクセスセキュリティ設定の問題であると私に信じています。上記のように、web.configの信頼は完全に設定されています。

CASがまだリモートアクセスをブロックしている可能性はありますか?誰もが他の地域を検討すると思いますか?私はアプリケーションプールACCTドメイン管理者を作ってみたし、それでも問題が発生


更新

少しより多くの情報...。同じ方法を使ってローカルマシンのドライブにアクセスすると、正常に動作します。アプリのプールアカウントを使用してSharepointの外でSnippetCompilerで同じコードを実行するとうまく動作します。

希望する場合は、私が試すことができる調査やテストの道を考えることができるかどうかを教えてください。


更新

イムわからない、これは問題に影響を与えるだろうが、ローカルサーバーは、Windows Server 2003を実行して、リモートサーバが


アップデートWindows 2000を実行している場合

私はウェブパーツを使ってコードを実行しようとしましたそれはうまく動作します。私が使用してコントロールを参照PageLayouts内すると

IIS 
- Websites 
    - SharePointWebApp (pointing to \wss\VirtualDirectories\SharePointWebApp) 
    - PageLayoutControls (virtual directory pointing to \wss\VirtualDirectories\PageLayoutControls) 

- :

wss 
- VirtualDirectories 
    - SharePointWebApp 
    - ...sp web app files 
    - . 
    - . 
    - PageLayoutControls 
    - control.ascx 
    - . 
    - . 

その後IISで、私は次のような構造を持っている - は、次のように私は失敗しているプロジェクトで使用するファイル構造であります以下: -

<%@ Register TagPrefix="TEST" TagName="MyControl" Src="~/PageLayoutControls/control.ascx" %> 
<asp:Content ContentPlaceholderID="PlaceHolderMain" runat="server"> 
    <TEST:MyControl id="myControl" runat="server"/> 
</asp:Content>Let me know if you need more info. 

更新

謎が深く...

SharePoint Webフロントエンドサーバー上のInternet Explorer(6または7)からSharePointサイトにアクセスすると例外はありません。

私はSP WebフロントエンドサーバーからMozilla FirefoxからSharepointサイトにアクセスすると例外が発生します。

すべてのブラウザからSharePointサイトにリモートアクセスすると例外が発生します。

また、SharePointサイトにアクセスする権限を持っている限り、サイトにログオンするユーザーは何も変わりません。

どのような考えですか?


を更新

うーん、私は今、「(私はリモートでSharePointサイトにアクセスした場合、SharePointサイトをローカル)(すなわちFile.CreateをFile.Createを(行うことを試みることを見つけましたC:\ temp \ abc.txt "))それは動作します。 SharepointサイトからSharePointサイトにアクセスし、File.Create()をリモートで実行すると(つまり、File.Create( "\ ServerName \ ShareName \ FolderName \ file.txt"))、それが動作します。

私はSharePointサイトにリモートアクセスし、SharePointサイトでリモートでFile.Create()を実行しようとすると失敗します。ダブルホップの問題の種類。これは、NTLM/Kerberosの問題かもしれないと私に思います。

現在、NTLM認証を使用しています。

誰かがこの種の問題を経験しましたか?


更新

うん、私は、これは二重のホップを許可しないNTLMの問題でかなり確信しています。私はちょうど基本認証とその働きを使用するようにSharePointサイトの認証を変更しました。それを統合認証に戻し、失敗しました。

ここで、Kerberosを使用するようにファームを移動するか、問題を回避する別の方法を見つけるかどうかを決定します。 : -/


更新

ちょうど今SPSecurity.RunWithElevatedPrivilegesに打撃を与えます。しかし、RunWithElevatedPrivilegesはこのコンテキストで使用されることを意図していますか?以前は、ネットワークにアクセスするファイルにアクセスするのではなく、SharePoint内のリストやライブラリにアクセスするためにしか使用していませんでした。

どのような考えですか?


更新

うん、SPSecurity.RunWithElevatedPrivilegesは、問題を解決します。 :-)

答えて

1

これはダブルホップの問題で、コードが偽装されたユーザーとしてリソースにアクセスしようとしているのですが、NTLMが別のサーバー(Kerberos)に偽装しないため失敗します。

SPSecurity.RunWithElevatedPrivilegesを試しましたか?それは偽装(RevertToSelf)を削除し、おそらくアプリケーションプールの所有者は自分自身として行動することができるかもしれませんが、以前はできなかったかもしれません。

ちょっと考えてみるとかなり簡単に試すことができます。

+0

提案に感謝カーク、私はそれを試してみて、SPSecurity.RunWithElevatedPrivilegesが問題を並べ替えるかどうかを知らせます。 –

関連する問題