SharePoint 中的角色、继承、特权提升和密码更改
角色、角色定义和角色分配
角色由两部分组成:角色定义和角色分配。
角色定义(或权限级别)是与角色关联的权限列表。 权限是 SharePoint 网站中唯一可控的操作。 例如,具有 “读取” 角色的用户可以浏览网站中的页面并查看列表中的项目。 用户权限从不直接使用权限进行管理。 所有用户和组权限都通过角色进行管理。 角色定义是绑定到特定对象的权限的集合。 角色定义 (例如“完全控制”、“读取”、“参与”、“设计”或“受限访问”) 范围限定为网站,其含义与网站内所有位置相同,但其含义可能在同一网站集中的网站之间有所不同。 角色定义也可以从父网站继承,就像可以继承权限一样。
角色分配是角色定义、用户和组之间的关系,以及范围 (例如,一个用户可能是列表 1 上的读者,而另一个用户可能是列表 2) 上的读取者。 通过角色分配表示的关系是使 SharePoint 安全管理基于角色的关键。 所有权限都通过角色进行管理;你从不直接向用户分配权限。 仅分配定义明确且一致的) 角色定义 (有意义的权限集合。 可以通过角色分配在角色定义中添加或删除用户和组,从而管理唯一权限。
网站管理员可以使用"管理角色"页来自定义默认角色定义和创建其他自定义角色,该页列出了网站中可用的角色定义。
角色定义继承
SharePoint 支持继承角色定义,就像它支持继承权限那样,而取消角色定义继承也要求取消权限继承。
每个 SharePoint 对象都可以拥有自己的权限集,也可以从其父容器继承权限。 SharePoint 不支持部分继承,对象将继承其父级的所有权限,并且也可以拥有一些自己的权限。 权限可以是独有的,也可以是继承的。 SharePoint 不支持定向继承。 例如,对象只能从其父容器继承,而不能从某些其他对象或容器继承。
当网站继承角色定义时,这些角色是只读的,就像继承的网站中的只读权限一样。 用户可通过链接导航到拥有唯一角色定义的父网站。 所有新网站(包括拥有独有权限的网站)的默认设置都是从父网站继承角色定义。 如果权限唯一,则角色定义可以还原为继承的角色定义,或编辑为本地角色定义。
根据如下规则,网站中的角色定义继承会影响权限继承:
不能继承权限,除非它还继承角色定义。
不能创建独有角色定义,除非它还创建独有权限。
不能还原为继承的角色定义,除非它也还原网站中的所有独有权限。 现有权限依赖角色定义。
不能还原为继承的权限,除非它也还原为继承的角色定义。 网站的权限始终与网站的角色定义关联。
管理用户标记
SharePoint 从 SharePoint 数据库中提取用户标记信息。 如果用户从未访问过该网站,或者如果用户的令牌是在 24 小时前生成的,SharePoint 将通过尝试刷新用户所属的组列表来生成新的用户令牌。
如果用户帐户是一个 NT 帐户,则 SharePoint 将使用 AuthZ 接口来查询 TokenGroups 属性的 Active Directory 目录服务。 如果 SharePoint 在 Extranet 模式下运行并且无权查询此属性的 Active Directory,则查询操作可能会失败。
如果用户帐户是一个成员资格用户,那么 SharePoint 会查询该用户所属的所有角色的 ASP.NET RoleManager。 如果当前的可执行文件不具有适当的 .config 文件,该操作可能会失败。
如果 SharePoint 无法从 Active Directory 或 <roleManager> 获取用户的组成员身份,则新生成的令牌仅包含用户的唯一安全 ID (SID) 。 不会引发任何异常,但会在 ULS 服务器日志中写入一项。 同时会将新的标记写入 SharePoint 数据库,以便不会在 24 小时内重新生成该标记。
在 SharePoint 从 SharePoint 数据库或生成新令牌获取新令牌后,SharePoint 将时间戳设置为当前时间,然后将其返回给调用方。 这可以保证令牌在 24 小时内处于新状态。
SPUserToken 对象返回到调用方后,调用方有责任在令牌过期后不使用令牌。 可以编写帮助程序实用工具,通过记录获取令牌的时间来跟踪令牌过期,并将差异与当前时间与 SPWebService.TokenTimeout 进行比较。
如果使用一个过期的标记创建 SharePoint 网站,则会引发异常。 默认标记超时值为 24 小时。 可以通过 SPWebService.TokenTimeout 访问它。
特权提升
特权提升(Windows SharePoint Services 3.0 中新增的一项功能)使你能够通过使用更高级别的特权以编程方式在代码中执行操作。 SPSecurity.RunWithElevatedPrivileges 方法使你能够提供一个委托,该委托在具有比当前用户更高的特权的帐户的上下文中运行一部分代码。
RunWithElevatedPrivileges 的标准用法是:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
// Do things by assuming the permission of the "system account".
});
通常,若要在 SharePoint 中执行操作,必须获取新的 SPSite 对象才能使更改生效。 例如:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(web.Site.ID))
{
// Do things by assuming the permission of the "system account".
}
});
尽管特权提升提供了一种用于管理安全性的有效方法,但是应谨慎使用。 不应对具有低特权的用户公开直接、不受控制的机制,以避开为他们授予的权限。
重要: 如果传递给 RunWithElevatedPrivileges 的方法包括任何写入操作,则调用 RunWithElevatedPrivileges 之前应调用 SPUtility.ValidateFormDigest () 或 SPWeb.ValidateFormDigest () 。
自动更改密码
利用自动更改密码功能,您可以更新和部署密码,而不必在多个帐户、服务和 Web 应用程序之间执行手动密码更新任务。 这使得在 SharePoint 中管理密码更简单。 您可以使用自动更改密码功能确定密码是否即将过期以及使用加密性很强的长随机字符串重置密码。
管理帐户
使用管理帐户可以实现自动更改密码功能。 管理帐户提高了安全性并可确保应用程序隔离。 借助管理帐户,您可以:
配置自动更改密码功能以在服务器场中的所有服务上部署密码。
配置运行在 SharePoint 服务器场中应用程序服务器上的 SharePoint Web 应用程序和服务,以使用不同的域帐户。
将管理帐户映射到服务器场中的各种服务和 Web 应用程序。
在 Active Directory 域服务 (AD DS) 中创建多个帐户,然后在 SharePoint 中注册每个帐户。
还可以注册托管帐户并启用 SharePoint 来控制帐户密码。 必须向用户通知计划的密码更改和相关服务中断,但是可以基于单独配置的密码重置计划在需要时自动重置 SharePoint 服务器场、Web 应用程序和各种服务使用的帐户,并在服务器场中对其进行部署。
可以使用 SPManagedAccount 类执行的操作包括:
更改密码
设置密码更改计划
传播密码更改
查明上次更改密码的时间
强制执行密码最小长度
有关管理帐户 API 的详细信息,请参阅以下链接: