限制或启用对 SharePoint Server 中的服务应用程序的访问

 

**上一次修改主题:**2018-03-02

**摘要:**了解在 SharePoint Server 2016 和 SharePoint 2013 中,如何通过添加和删除服务帐户来限制对服务应用程序的访问,以及如何重建对服务应用程序的本地服务器场范围的访问。

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

默认情况下,本地服务器场上的所有服务应用程序可供本地服务器场上的所有 Web 应用程序使用。如果在同一服务器场上承载多个客户,并且希望将一个客户的服务应用程序与另一个客户的 Web 应用程序进行隔离,可能需要限制对服务应用程序的访问。

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

本文内容:

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

  • 还原对服务应用程序的服务器场范围访问

  • Windows PowerShell 代码示例

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

要限制对服务应用程序的访问,可从服务应用程序删除服务帐户。反过来,若要启用对服务应用程序的访问,可向服务应用程序添加服务帐户。可以使用管理中心或使用 PowerShell 来执行这些任务。

若要限制对服务应用程序的访问,必须完成以下任务:

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

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

备注

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

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

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

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

警告

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

本节内容:

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

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

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

若要使用 SharePoint 管理中心网站限制对服务应用程序的访问,请按照以下步骤操作:

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

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

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

本节中的过程:

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

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

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

  1. 确认执行此过程的用户帐户是 SharePoint 组“服务器场管理员”的成员。

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

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

    服务帐户显示在“为该组件选择帐户”列表中。记录该服务帐户的名称,因为在下一过程中您将会用到该名称。

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

使用管理中心为服务帐户授予访问服务应用程序的权限以及移除该权限

  1. 确认执行此过程的用户帐户是 SharePoint 组“服务器场管理员”的成员。

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

  3. 在“管理服务应用程序”页上,单击包含您要为其分配权限的服务应用程序的行。

    功能区将变为可用。

  4. 在功能区的“共享”组中,单击“权限”。

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

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

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

  8. 确保“连接权限”页现在只列出您希望其访问服务应用程序的服务帐户,并且该服务帐户对服务应用程序拥有必需的权限。单击“确定”更改权限,或单击“取消”结束任务,不进行更改。

可以通过使用此过程授予和删除任何服务帐户的权限。若要使用 CentralAdmin_2nd 将本地服务器场 ID 还原到服务应用程序,还需一个额外步骤,该步骤不适用于其他服务帐户。有关如何执行此操作的信息,请参阅下文中的还原对服务应用程序的服务器场级别访问。

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

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

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

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

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

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

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

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

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

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

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

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

本节内容:

  • 启动 Windows PowerShell 会话

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

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

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

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

启动 Microsoft PowerShell 会话

  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 PowerShell cmdlet 的服务器上的 Administrators 组。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint Server cmdlet 的权限。

    备注

    如果您不具有这些权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin

  2. 启动 SharePoint 命令行管理程序。

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

  1. 在 PowerShell 命令提示符下,键入以下命令检索 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 添加到服务应用程序来还原对服务应用程序的服务器场范围访问。可以使用管理中心或 PowerShell 命令完成此任务。但是,必须使用 PowerShell 获得本地服务器场 ID。

本节内容:

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

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

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

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

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

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

    $farmID = Get-SPFarm | select id
    

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

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

    $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. 单击“确定”还原对服务应用程序的服务器场范围访问,或单击“取消”结束任务,不进行更改。

使用Microsoft 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 $Principal -Rights "Full Control"
    Set-SPServiceApplicationSecurity $spguid -ObjectSecurity $security
    

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

    重要

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

Microsoft 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 
$farmappId = 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 $farmappId
Set-SPServiceApplicationSecurity $spguid -ObjectSecurity $security
(Get-SPServiceApplicationSecurity $spguid).AccessRules

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

$farmid = Get-SPFarm | select id
$claimProvider = (Get-SPClaimProvider System).ClaimProvider 
$farmappId = 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 $farmappId -Rights "Full Control"
Set-SPServiceApplicationSecurity $spguid -ObjectSecurity $security
(Get-SPServiceApplicationSecurity $spguid).AccessRules

See also

在 SharePoint 服务器中创建 web 应用程序
在 SharePoint Server 中添加或删除 Web 应用程序的服务应用程序连接
SharePoint Server 2016 中的帐户权限和安全设置

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