限制或允许对服务应用程序的访问 (SharePoint Server 2010)

 

适用于: SharePoint Foundation 2010, SharePoint Server 2010

上一次修改主题: 2016-11-30

在 Microsoft SharePoint Server 2010 中,可以限制对某个服务应用程序的访问,以使其只供指定 Web 应用程序访问。

默认情况下,本地服务器场上的所有服务应用程序可供本地服务器场上的所有 Web 应用程序使用。但是,可以限制对某个服务应用程序的访问,以使其只供指定 Web 应用程序访问。如果您在同一个服务器场上承载多个客户,并且希望一个客户的服务应用程序与另一个客户的 Web 应用程序隔开,则可以采取这一有效办法。

如果最初限制了对某个服务应用程序的访问,之后又决定希望它供整个服务器场使用,则可以删除限制。

本文介绍如何通过添加和删除服务帐户来限制对服务应用程序的访问。此外,还介绍了如何重建对服务应用程序的本地服务器场范围访问。

重要

强烈建议您在限制对服务应用程序的访问之前,先仔细规划安全和服务基础结构。

有关如何在 SharePoint Server 2010 中规划服务体系结构的信息,请参阅下列文章:

本文内容:

  • 限制对服务应用程序的访问

  • 恢复对服务应用程序的服务器场级别访问

  • Windows Powershell 代码示例

限制对服务应用程序的访问

可以通过从服务应用程序删除服务帐户来限制对服务应用程序的访问。反过来,也可以通过在服务应用程序中添加服务帐户来允许对服务应用程序的访问。可以通过管理中心或 Windows PowerShell 2.0 来执行这些任务。

若要限制对服务应用程序的访问,必须执行下列任务:

  1. 在服务应用程序中添加特定服务帐户。

  2. 从服务应用程序中删除本地服务器场 ID。

备注

本文中的过程描述了如何限制或恢复对服务应用程序的访问。但是,也可以按照过程中提供的步骤在任何服务应用程序中添加任何服务帐户,或从任何服务应用程序中删除任何服务帐户。
例如,使用管理中心恢复对服务应用程序的本地服务器场范围访问这一过程清楚地描述了如何在服务应用程序中添加本地服务器场 ID。但是,同样的过程也可用来在服务应用程序中添加任何其他服务帐户。为此,需要提供适当的服务帐户而非本地服务器场 ID。

由于在默认情况下,本地服务器场 ID 提供对服务应用程序的本地服务器场范围访问,因此,无需再将显式本地 Web 应用程序权限授予服务应用程序,除非您也删除了本地服务器场 ID。

若要将权限授予服务应用程序,必须检索和提供适当的服务帐户。对 Web 应用程序而言,该帐户也称应用程序池标识帐户

将权限授予服务帐户并从服务应用程序中删除本地服务器场 ID 后,只有受指定服务帐户管理的 Web 应用程序可以访问服务应用程序。通过重复这些过程,并将各种 Web 应用程序服务帐户添加到服务应用程序中,可将多个 Web 应用程序(具有不同管理服务帐户)分配给同一个服务应用程序。

警告

如果从服务应用程序中删除本地服务器场 ID,并且不向该服务应用程序分配任何其他服务帐户,则该服务应用程序将变为对所有 Web 应用程序都不可用。

本节内容:

  • 使用管理中心限制对服务应用程序的访问

  • 使用 Windows PowerShell 限制对服务应用程序的访问

使用管理中心限制对服务应用程序的访问

若要使用管理中心限制对服务应用程序的访问,必须执行下列步骤:

  1. 检索 Web 应用程序服务帐户。

  2. 在服务应用程序中添加 Web 应用程序服务帐户。

  3. 从服务应用程序中删除本地服务器场 ID。

本节中的过程:

  • 使用管理中心检索 Web 应用程序服务帐户

  • 使用管理中心为服务帐户授予和删除访问服务应用程序的权限

使用管理中心检索 Web 应用程序服务帐户

  1. 确认执行此过程的用户帐户是 SharePoint 组“Farm Administrators”的成员。

  2. 在管理中心主页的“安全性”部分,单击“配置服务帐户”。

  3. 在“服务帐户”页上,从第一个下拉列表中选择 Web 应用程序名称。

    服务帐户显示在“为该组件选择帐户”列表中。记下服务帐户的名称,以便在下一过程中使用。

  4. 单击“取消”不做任何更改退出“服务帐户”页。

使用管理中心为服务帐户授予和删除访问服务应用程序的权限

  1. 确认执行此过程的用户帐户是 SharePoint 组“Farm Administrators”的成员。

  2. 在管理中心主页的“应用程序管理”部分,单击“管理服务应用程序”。

  3. 在“管理服务应用程序”页上,单击含有您要为其分配权限的服务应用程序的行。功能区此时变为可用。

  4. 在功能区上,单击“权限”。

  5. 在“连接权限”对话框中,键入在上一过程中检索到的服务帐户名称,然后单击“添加”。

  6. 确保在中间窗格中最近增加的服务帐户名为选中状态,然后单击下方窗格中相应的复选框以提供必需的权限级别。

  7. 在中间窗格中,单击“本地服务器场”,然后单击“删除”。

  8. 验证“连接权限”页现在是否只列出了访问服务应用程序需要的服务帐户,以及服务帐户是否对服务应用程序拥有必需的权限。单击“确定”更改权限,或单击“取消”不做更改结束操作。

可以使用此过程为任何服务帐户授予和删除权限。

备注

若要使用管理中心将本地服务器场 ID 恢复到服务应用程序,还需一个额外步骤,该步骤不适用于其他服务帐户。有关如何执行此操作的信息,请参阅下文中的恢复对服务应用程序的服务器场级别访问一节。

使用 Windows PowerShell 限制对服务应用程序的访问

本节中的所有过程都假定您拥有适当的权限,并已打开 Windows PowerShell 2.0 命令提示符窗口,如本节后面的启动 Windows PowerShell 会话过程中所述。

与使用管理中心限制对服务应用程序的访问相比,使用 Windows PowerShell 2.0 执行相同的任务的过程更加复杂。在 Windows PowerShell 2.0 中,您将使用一些过程来收集和存储信息,以便输入到后面的过程中。

启动 Windows PowerShell 2.0 后,用来限制对服务应用程序的访问的其余步骤如下:

  1. 检索本地服务器场 ID。

  2. 检索 Web 应用程序服务帐户。

  3. 创建新的包含 Web 应用程序服务帐户的声明主体。

  4. 检索服务应用程序的安全对象。

  5. 将 Web 应用程序服务帐户添加到服务应用程序的安全对象中。

  6. 从服务应用程序的安全对象中删除本地服务器场 ID。

  7. 将更新的安全对象赋予服务应用程序。

  8. 显示和审阅更新的权限

本节内容:

  • 启动 Windows PowerShell 会话

  • 使用 Windows PowerShell 检索本地服务器场 ID

  • 使用 Windows PowerShell 检索 Web 应用程序服务帐户并创建新的声明主体

  • 检索服务应用程序的安全对象

  • 用首选的权限更新服务应用程序安全对象

启动 Windows PowerShell 会话

  1. 验证您是否满足下列最低要求:是配置数据库上 SharePoint_Shell_Access 角色的成员,也是安装有 SharePoint Server 2010 的计算机上 WSS_ADMIN_WPG 本地组的成员。

  2. 在“开始”菜单上,单击“所有程序”。

  3. 单击“Microsoft SharePoint 2010 产品”。

  4. 单击“SharePoint 2010 Management Shell”。

使用 Windows PowerShell 检索 Web 应用程序服务帐户并创建新的声明主体

  1. 在 Windows PowerShell 2.0 命令提示符下,键入以下命令检索 Web 应用程序的服务帐户(即应用程序池标识帐户):

    $webapp = Get-SPWebApplication <http://WebApplication>
    $webApp.ApplicationPool.UserName
    

    其中 <http://WebApplication> 是 Web 应用程序 URL。

    Web 应用程序服务帐户名在命令提示符处显示。

  2. 若要创建新的声明主体,请键入以下命令:

    $principal = New-SPClaimsPrincipal <ServiceAccount> -IdentityType WindowsSamAccountName
    

    其中 <ServiceAccount> 是运行前面的命令后检索到的用户名(形式为 jane@contoso.com 或 contoso\jane)。$principal 变量将包含新的声明主体。

检索服务应用程序的安全对象

  1. 若要检索服务应用程序的安全对象,请键入以下命令。$security 变量将存储服务应用程序安全对象。

    $spapp = Get-SPServiceApplication -Name "<ServiceApplicationDisplayName>"
    $spguid = $spapp.id
    $security = Get-SPServiceApplicationSecurity $spguid
    

    其中 <ServiceApplicationDisplayName> 是服务应用程序的显示名称。

    重要

    必须将显示名称用双引号引起来,而且显示名称必须与服务应用程序显示名称完全匹配,包括大小写形式。如果您拥有多个服务应用程序,这些服务应用程序具有完全相同的显示名称(不建议如此),则可以不加参数运行 Get-SPServiceApplication cmdlet 以查看所有服务应用程序。然后,可以通过 GUID 直接识别服务应用程序。例如:
    Get-SpServiceApplication
    所有服务应用程序都列出。
    $spapp = Get-SpserviceApplication -Identity <GUID>
    $spguid = $spapp.id
    其中 <GUID> 是要为其更新权限的服务应用程序的 GUID。

用首选的权限更新服务应用程序安全对象

  1. 若要更新服务应用程序安全对象,第一步是将新的声明主体 $principal 添加到服务应用程序安全对象 $security 中。为此,请键入以下命令:

    Grant-SPObjectSecurity $security $principal -Rights "<Rights>"
    

    其中 <Rights> 是要授予的权限。通常为“完全控制”权限。不同的服务应用程序具有不同的可用权限。

    提示

    如果您不希望授予“完全控制”权限,也不知道可授予服务应用程序哪些权限,则可以运行以下命令来返回可用权限字符串:
    $rightslist = Get-SPServiceApplicationSecurity $spapp
    $rightslist.NamedAccessRights

  2. 若要从服务应用程序安全对象 $security 删除本地服务器场 ID(存储在 $farmID 变量中),请键入以下命令:

    Revoke-SPObjectSecurity $security $farmID 
    
  3. 若要将更新的 $security 安全对象分配给服务应用程序,并确认是否相应更新了服务应用程序的安全对象,请键入下列命令:

    Set-SPServiceApplicationSecurity $spapp -ObjectSecurity $security
    (Get-SPServiceApplicationSecurity $spapp).AccessRules
    

可以使用这些过程在服务应用程序中添加或从中删除任何服务帐户。

恢复对服务应用程序的服务器场范围访问

可以通过将本地服务器场 ID 添加到服务应用程序中来恢复对服务应用程序的服务器场范围访问。可以使用管理中心或 Windows PowerShell 2.0 命令完成此任务。但是,必须使用 Windows PowerShell 2.0 获得本地服务器场 ID。

本节内容:

  • 使用 Windows Powershell 检索本地服务器场 ID

  • 使用管理中心恢复对服务应用程序的本地服务器场范围访问

  • 使用 Windows Powershell 恢复对服务应用程序的本地服务器场范围访问

使用 Windows PowerShell 检索本地服务器场 ID

  1. 此过程在启动 Windows PowerShell 会话过程的第 4 步后开始。

  2. 以下命令检索本地服务器场 ID,将其存储在 $farmID 变量中,并在命令提示符处显示 ID:

    $farmID = Get-SPFarm | select id
    

    如果要使用管理中心恢复服务器场范围的访问,请将此值复制到剪贴板上,以便在下面的过程中使用。

    如果要使用 Windows PowerShell 2.0 恢复对服务应用程序的服务器场范围访问,请在 Windows PowerShell 2.0 命令提示符处另键入以下命令。下面的过程将用到检索到的信息。

    $claimProvider = (Get-SPClaimProvider System).ClaimProvider 
    $principal = New-SPClaimsPrincipal -ClaimType "https://schemas.microsoft.com/sharepoint/2009/08/claims/farmid" -ClaimProvider $claimProvider -ClaimValue $farmid
    

使用管理中心恢复对服务应用程序的本地服务器场范围访问

  1. 执行使用管理中心为服务帐户授予和删除访问服务应用程序的权限这一过程中的第 1 至 3 步。

  2. 在“连接权限”对话框中,复制在上一过程中检索到的本地服务器场 ID,然后单击“添加”。

  3. 确保在中间窗格中本地服务器场 ID 为选中状态。单击下方窗格中的“完全控制”复选框。

  4. 单击“确定”恢复对服务应用程序的服务器场范围访问,或单击“取消”不做更改结束操作。

使用 Windows Powershell 恢复对服务应用程序的本地服务器场范围访问

  1. 此过程在使用 Windows PowerShell 检索本地服务器场 ID 过程的第 2 步后开始。

  2. 若要将检索到的本地服务器场 ID 恢复到服务应用程序安全对象 $security,请键入下列命令:

    $spapp = Get-SPServiceApplication -Name "<ServiceApplicationDisplayName>"
    $spguid = $spapp.id
    $security = Get-SPServiceApplicationSecurity $spguid
    Grant-SPObjectSecurity -Identity $security -Principal $farmID -Rights "Full Control"
    Set-SPServiceApplicationSecurity $spguid -ObjectSecurity $security
    

    其中 <ServiceApplicationDisplayName> 是服务应用程序的显示名称。

    重要

    必须将显示名称用双引号引起来,而且显示名称必须与服务应用程序显示名称完全匹配,包括大小写形式。如果您拥有多个服务应用程序,这些服务应用程序具有完全相同的名称(不建议如此),则可以不加参数运行 Get-SPServiceApplication cmdlet 以查看所有服务应用程序。然后,可以通过 GUID 直接识别服务应用程序。

Windows PowerShell 代码示例

在下例中,管理员将对“Contoso BDC”服务应用程序的访问仅限于 http://contoso/hawaii Web 应用程序,该程序受服务帐户“contoso\jane”管理。通过添加“contoso\jane”并从服务应用程序中删除本地服务器场服务帐户,“Contoso BDC”仅供那些受服务帐户“contoso\jane”管理的 Web 应用程序(在本例中为 http://contoso/hawaii)访问。

$farmid = Get-SPFarm | select id
$claimProvider = (Get-SPClaimProvider System).ClaimProvider 
$principal = New-SPClaimsPrincipal -ClaimType "https://schemas.microsoft.com/sharepoint/2009/08/claims/farmid" -ClaimProvider $claimProvider -ClaimValue $farmid 
webapp = get-spwebapplication http://contoso
$webapp.applicationpool
$principal = New-SPClaimsPrincipal contoso/jane -IdentityType WindowsSamAccountName
$spapp = Get-SPServiceApplication -Name "Contoso BDC"
$spguid = $spapp.id
$security = Get-SPServiceApplicationSecurity $spguid
Grant-SPObjectSecurity $security $principal -Rights "Full Control"
Revoke-SPObjectSecurity $security $farmaccount
Set-SPServiceApplicationSecurity $spguid -ObjectSecurity $security
(Get-SPServiceApplicationSecurity $spguid).AccessRules

在下例中,恢复了对服务应用程序“Contoso BDC”的访问,使得本地服务器场中的所有 Web 应用程序都能访问它。

$farmid = Get-SPFarm | select id
$claimProvider = (Get-SPClaimProvider System).ClaimProvider 
$principal = New-SPClaimsPrincipal -ClaimType "https://schemas.microsoft.com/sharepoint/2009/08/claims/farmid" -ClaimProvider $claimProvider -ClaimValue $farmid 
$spapp = Get-SPServiceApplication -Name "Contoso BDC"
$spguid = $spapp.id
$security = Get-SPServiceApplicationSecurity $spguid
Grant-SPObjectSecurity -Identity $security -Principal $farmaccount -Rights "Full Control"
Set-SPServiceApplicationSecurity $spguid -ObjectSecurity $security
(Get-SPServiceApplicationSecurity $spguid).AccessRules

See Also

Reference

Get-SPWebApplication
New-SPClaimsPrincipal
Get-SPServiceApplication
Get-SPServiceApplicationSecurity
Grant-SPObjectSecurity
Revoke-SPObjectSecurity
Set-SPServiceApplicationSecurity
Get-SPFarm
Get-SPClaimProvider

Concepts

配置声明身份验证 (SharePoint Server 2010)
添加或删除 Web 应用程序的服务应用程序连接 (SharePoint Server 2010)

Other Resources

向 Web 应用程序添加或删除服务应用程序连接 (SharePoint Foundation 2010)