- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 SharePoint 2007 中编写了两个功能。一个的范围是网站级别,它基本上将一个 Web 部件添加到激活它的网站集中。该功能组件部署在“bin”目录下。第二个是 Farm 范围,它是我的自定义 SPPersistedObject,部署在管理中心。该程序集已添加到 GAC 中。
我需要从 Web 部件更新我的自定义对象。这在大多数情况下工作得很好。但在一些遵循最小权限管理域帐户的服务器上' http://technet.microsoft.com/en-us/library/cc263445.aspx ' 我收到以下错误
System.Security.SecurityException: Access denied. at Microsoft.SharePoint.Administration.SPPersistedObject.Update() at MyWebPart.<>c__DisplayClass1.b__0() at Microsoft.SharePoint.SPSecurity.CodeToRunElevatedWrapper(Object state) at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.b__2() at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode) at MyWebPart.RenderWebPart(HtmlTextWriter writer) The Zone of the assembly that failed was: MyComputer
我需要设置任何权限或 CAS 策略来防止此错误吗?
下面是我当前为 Web 部件组装设置的 CAS 策略。我需要在这里进行任何更改吗?
<CodeAccessSecurity>
<PolicyItem>
<PermissionSet class="NamedPermissionSet" version="1" Name="MyPermission" Description="Permission set for my solution">
<IPermission class="System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Level="Medium" />
<IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="AllFlags" />
<IPermission class="Microsoft.SharePoint.Security.WebPartPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" Connections="true" />
<IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="true" UnsafeSaveOnGet="true" Impersonate="true"/>
<IPermission class="System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true">
<ConnectAccess>
<URI uri="$OriginHost$"/>
<URI uri="http://.*\.xyz\.com/.*"/>
</ConnectAccess>
</IPermission>
</PermissionSet>
<Assemblies>
<Assembly Name="MyWebPart" Version="1.0.0.0" PublicKeyBlob="0024000004800000940000000602000000240000525341310004000001000100df0e85cb8c660241cd3225eb653a590b91303ddbd37f8f1e661d2dffb840a258b899d6bacbbc55d03768d5ea0260ee4c8341fd447d7200abdb74b837733c3f756833e169cae803aef808530dd3ddad953a49492faee3eeba6f0dba66b0d66f1f9ca5266c69dcb799ed364db5e9e6ebcd4e81fb27365de962cbe6e7e7fba300dc"/>
</Assemblies>
</PolicyItem>
</CodeAccessSecurity>
请指教。
问候,贾格纳特
最佳答案
贾格纳特,
您遇到的问题是由于 SPPersistedObject 派生类型的数据的后备存储是 SharePoint 场配置数据库。在最低权限安装中,唯一具有对此数据库的读取访问权限以外的任何权限的帐户是场服务(计时器服务)帐户。即使提升代码中的权限也只会将您的安全上下文“提升”到站点在 IIS 中运行的应用程序池帐户的安全上下文。
我以前遇到过您遇到的情况,我只知道两种解决方法:
找到一种在场服务帐户上下文中运行应用程序代码的方法。这通常会转化为将代码作为自定义计时器作业运行。
调整场配置数据库权限以授予应用程序池帐户(假设作为提升的安全 block 的一部分运行时)写入访问权限。
在这两个选项中,只有第一个选项符合“最小权限”执行原则……但它确实需要重新构建代码。
我通常很好地创建了一个“扫描”自定义计时器作业,该作业被创建并计划在功能激活时运行。然后,该计时器作业检查网站集(通常扫描整个 Web 应用程序)以查看是否需要保留、更新属性等。如果发现需要更新,则由计时器作业执行更新,因为它具有所需的访问权限级别。
我所描述的示例出现在我在 CodePlex ( http://blobcachefarmflush.codeplex.com/SourceControl/changeset/view/53851#797787 ) 上发布的功能中。我需要更新 SPWebApplication 实例上的属性包,而执行此操作的唯一方法是在计时器作业的上下文中。当用户在 UI 中进行更改时,会在网站集 RootWeb 的 Properties 集合上设置一个标志。计时器作业扫描网站集,当它看到这样的标志设置时,它会负责从适当的安全上下文中进行必要的更改。
希望这会有所帮助!
关于security - 从 Web 部件更新 SPPersistedObject 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1147373/
我在 SharePoint 2007 中编写了两个功能。一个的范围是网站级别,它基本上将一个 Web 部件添加到激活它的网站集中。该功能组件部署在“bin”目录下。第二个是 Farm 范围,它是我的自
我是一名优秀的程序员,十分优秀!