限制或启用对服务应用程序的访问 (SharePoint Foundation 2010)

 

适用于: SharePoint Foundation 2010

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

在 Microsoft SharePoint Foundation 2010 中,您可以限制对服务应用程序的访问,从而仅允许指定的 Web 应用程序访问服务应用程序。

默认情况下,本地服务器场中的所有服务应用程序对于本地服务器场中的所有 Web 应用程序都可用。不过,您可以限制对服务应用程序的访问权限,仅允许访问指定的 Web 应用程序。如果在一个服务器场中托管了多个客户,并且希望将某个客户的服务应用程序与另一个客户的 Web 应用程序隔离,使用这样的策略将很有用。

如果限制了对某个服务应用程序的访问,但后来决定想要这个服务应用程序可用于整个服务器场,则可以将此限制取消。

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

重要

我们强烈建议您在对服务应用程序实行限制访问之前规划安全和服务基础结构。

有关如何在 SharePoint Foundation 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 Foundation 2010 的计算机上,您是配置数据库上 SharePoint_Shell_Access 角色的成员,也是 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”(在此示例中为 http://contoso/hawaii)管理的 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 
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 Foundation 2010)
向 Web 应用程序添加或删除服务应用程序连接 (SharePoint Foundation 2010)