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

适用于:yes-img-132013 yes-img-162016 yes-img-192019 yes-img-seSubscription Edition no-img-sopSharePoint in Microsoft 365

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

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

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

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

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

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

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

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

本文中的过程描述了如何限制或还原对服务应用程序的访问。 但是,也可以按照过程中的步骤向任何服务应用程序添加任何服务帐户,或从任何服务应用程序中删除任何服务帐户。

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

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

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

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

警告

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

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

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

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

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

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

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

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

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

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

    The service account is shown in the Select an account for this component list. Record the service account name because you'll use it in the next procedure.

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

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

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

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

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

    功能区将变为可用。

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

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

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

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

  8. Verify that the Connection Permissions page now lists only the service account that you want to access the service application, and that the service account has the required permissions on the service application. Click OK to change the permissions, or click Cancel to end the task without making changes.

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

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

本节中的所有过程都假定你具有适当的权限。

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

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

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

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

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

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

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

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

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

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

启动 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> 是 (或 contoso\jane) 形式的 jane@contoso.com 用户名,通过运行上一个命令检索。 $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中删除存储在 $farmID 变量) 中的本地场 ID (,请键入以下命令:

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

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

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

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

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

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

  1. 此过程在启动 Microsoft PowerShell 会话的具体步骤过程的第 4 步后开始。

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

    $farmID = Get-SPFarm | select id
    

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

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

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

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

  1. 执行使用管理中心授予或取消服务帐户访问服务应用程序的权限过程的步骤 1 到 3。

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

  3. Ensure that the local farm ID is selected in the middle pane. Click the Full Control check box in the bottom pane.

  4. 单击“确定”还原对服务应用程序的服务器场范围访问,或单击“取消”结束任务,不进行更改。

使用 Microsoft PowerShell 还原对服务应用程序的本地服务器场范围访问

  1. 此过程在过程步骤 2 之后开始 :使用 Windows PowerShell 检索本地场 ID

  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 "http://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 "http://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

另请参阅

概念

在 SharePoint Server 中添加或删除 Web 应用程序的服务应用程序连接

SharePoint Server 2016 和 SharePoint Server 2019 中的帐户权限和安全设置

其他资源

在 SharePoint Server 中创建 Web 应用程序

Get-SPWebApplication

New-SPClaimsPrincipal

Get-SPServiceApplication

Get-SPServiceApplicationSecurity

Grant-SPObjectSecurity

Set-SPServiceApplicationSecurity

Get-SPFarm

Get-SPClaimProvider