【问题标题】:SharePoint 2007 Remote File Access Denied CASSharePoint 2007 远程文件访问被拒绝 CAS
【发布时间】:2009-03-19 09:20:26
【问题描述】:

我有代码在 SharePoint 2007 的 PageLayout 内的 ascx 中运行,它访问远程服务器上的文件,即 File.Create("\servername\sharename\folder\file.txt")。代码在 web.config 中将 CAS 信任设置为 Full 的 SharePoint Web 应用程序中运行。 File.Create 抛出以下异常:-

System.UnauthorizedAccessException

对路径“\\servername\sharename\folder\file.txt”的访问被拒绝。

共享共享给具有完全控制权的所有人,并且 NTFS 权限设置为具有完全控制权的所有人。 Web 应用程序池在域帐户下运行,也具有访问该资源的显式权限(不是应该需要的)。

我在远程机器上运行了 Process Monitor,但服务器上没有记录任何点击。这让我相信这是 SharePoint 代码访问安全设置的问题。就像我上面所说的,对 web.config 的信任设置为 Full。

CAS 是否可能仍在阻止远程访问?谁能想到其他需要审查的领域?


更新

更多信息...

我已尝试将应用程序池设置为域管理员,但问题仍然存在。当使用相同的方法访问本地计算机上的驱动器时,它工作正常。使用应用程序池帐户在共享点之外的 SnippetCompiler 中运行相同的代码可以正常工作。

希望这会有所帮助,如果您能想到我可以尝试的更多调查或测试途径,请告诉我。


更新

我不确定这是否会影响问题,但本地服务器运行的是 Windows Server 2003,而远程服务器运行的是 Windows 2000。


更新

我刚刚尝试通过 Web 部件运行代码,它运行良好。我在失败的项目中使用的文件结构如下:-

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

然后在 IIS 中我有以下结构:-

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

然后在 PageLayouts 中,我使用以下内容引用控件:-

<%@ 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 访问共享点站点时,我确实遇到了异常。

当我从任何浏览器远程访问共享点站点时,我得到了异常。

此外,我使用什么用户登录该站点也没有区别,只要他们有权访问共享点站点即可。

有什么想法吗?


更新

嗯,我现在发现如果我远程访问共享点站点并且共享点站点尝试在本地执行 File.Create()(即 File.Create("C:\temp\abc.txt"))然后它工作。如果我从共享点框访问共享点站点并远程执行 File.Create()(即 File.Create("\ServerName\ShareName\FolderName\file.txt")),那么它可以工作。

只有当我远程访问共享点站点并让共享点站点尝试远程执行 File.Create() 时,它才会失败。有点像双跳问题。这让我觉得这可能是 NTLM / Kerberos 问题。

目前,我们正在使用 NTLM 身份验证运行。

有没有其他人遇到过这种问题?


更新

是的,我很确定这是一个不允许双跳的 NTLM 问题。我刚刚将共享点站点上的身份验证更改为使用基本身份验证并且它有效。改回集成身份验证失败了。

现在决定是迁移服务器场以使用 Kerberos 还是找到解决问题的其他方法。 :-/


更新

现在就试试 SPSecurity.RunWithElevatedPrivileges。但有一件事,RunWithElevatedPrivileges 是否意味着在这种情况下使用?以前,我只使用它来访问 SharePoint 中的列表和库,而不是访问网络中的文件。

有什么想法吗?


更新

是的,SPSecurity.RunWithElevatedPrivileges 解决了这个问题。 :-)

【问题讨论】:

    标签: asp.net security sharepoint moss code-access-security


    【解决方案1】:

    我想知道这是否是双跳问题,并且您的代码正试图以模拟用户的身份访问资源,但这失败了,因为 NTLM 不会模拟到另一台服务器(Kerberos 会)。

    您是否尝试过 SPSecurity.RunWithElevatedPrivileges?这将删除模拟(RevertToSelf),然后应用程序池所有者可能只能充当他自己(她自己?),而之前可能不能。

    只是一个想法,应该很容易尝试。

    【讨论】:

    • 为 Kirk 的建议干杯,我会试一试,如果 SPSecurity.RunWithElevatedPrivileges 解决了问题,我会通知您。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多