使用 Azure Arc 支持的 SQL Server 以最低权限运行

适用范围:SQL Server

最低特权的信息安全原则认为,应仅向用户和应用程序授予对执行其作业所需的数据和操作的访问权限。 使用由 Azure Arc 启用的 SQL Server 后,可使用最低特权运行代理扩展服务。 本文介绍如何使用最低特权运行代理扩展服务。

为适用于 SQL Server 的 Azure Extension 配置 Windows 服务帐户和权限介绍代理扩展服务的最低特权权限。

默认启用最低权限

以下版本的Azure Extension for SQL Server默认启用最小权限:

  • 版本 1.1.3453.436
  • 版本 1.1.3518.465 及以后版本

在1.1.3453.436之前的版本,或1.1.3464.439、1.1.3494.451和1.1.3500.453版本中,默认不启用最小权限。 对于这些版本,请按照本文步骤手动启用最小权限。

注意

对于使用 1.1.2859.223 或更高版本的现有服务器,当启用自动升级时,最低权限配置最终会作为自动升级的一部分应用。 为防止自动应用最小权限配置,请在 1.1.2859.223 之后阻止扩展升级。

当启用最小权限时,Azure SQL Server扩展会自动创建并管理NT SERVICE\SqlServerExtension为本地Windows服务账户和SQL Server登录:

  • 该扩展只授予该账户读取和存储配置及写日志所需的 Windows 权限。
  • 该扩展赋予登录所需的最低 SQL Server 权限,这些权限由启用的功能实现。
  • 当权限不再需要时,扩展会撤销,比如禁用某个功能。
  • 当你卸载SQL Server的Azure扩展或禁用最小权限时,扩展会移除该账户。

先决条件

本节说明系统需求和启用或禁用最小权限所需的工具。

系统要求

配置最小权限需要:

  • Windows Server 2016 或更高版本。
  • SQL Server 2014(12.x)及更高版本。
  • SQL Server服务帐户必须是 sysadmin 固定服务器角色的成员。
  • 所有数据库必须在线且可更新。

Linux 目前不支持最低权限。

工具

若要完成本文中的步骤,需要以下工具:

启用或禁用最小权限

  1. 使用 Azure CLI 登录。

    az login
    
  2. 验证 arcdata 扩展版本。

    az extension list -o table
    

    如果结果包含支持的 arcdata 版本,请跳至下一步。

    必要时,安装或更新 arcdata Azure CLI 扩展。

    若要安装此扩展,请执行以下操作:

    az extension add --name arcdata
    

    如何更新扩展:

    az extension update --name arcdata
    
  3. 使用 Azure CLI 启用最低特权。

    若要启用最低特权,请将 LeastPrivilege 功能标签设置为 true。 要禁用,请将功能标志设置为 false。 要完成此任务,请执行以下命令,并将其中的 <resource-group> 和 <machine-name> 替换为你自己的值。

    az sql server-arc extension feature-flag set --name LeastPrivilege --enable true --resource-group <resource-group> --machine-name <machine-name>
    

    例如,以下命令为名为 myserver 的资源组中的名为 myrg 的服务器启用最低特权:

    az sql server-arc extension feature-flag set --name LeastPrivilege --enable true --resource-group myrg --machine-name myserver
    

验证最低特权配置

要验证通过 Azure Arc 启用的 SQL Server 是否配置为以最小权限运行:

  1. 在服务中,查找 Microsoft SQL Server 扩展服务。 确认服务是否运行在 NT SERVICE\SqlServerExtension 服务账户下。

  2. 在服务器上打开 任务调度器 。 验证一个名为 SqlServerExtensionPermissionProvider 事件驱动的任务是否存在于 Microsoft\SqlServerExtension。

  3. 打开 SQL Server Management Studio 并检查名为 NT SERVICE\SqlServerExtension 的登录。 确认账户被分配了以下基础权限:

    • CONNECT SQL
    • VIEW DATABASE STATE
    • VIEW SERVER STATE
  4. 使用以下查询验证权限:

    若要验证服务器级权限,请运行以下查询:

    EXECUTE AS LOGIN = 'NT SERVICE\SqlServerExtension';
    
    SELECT *
    FROM fn_my_permissions(NULL, 'SERVER');
    
    REVERT;
    

    要验证数据库级权限,请将 <database-name> 替换为你其中一个数据库的名称,并运行以下查询:

    EXECUTE AS LOGIN = 'NT SERVICE\SqlServerExtension';
    
    USE [<database-name>];
    SELECT * FROM fn_my_permissions(NULL, 'database');
    
    REVERT;
    

可选:管理SQL Server数据库引擎服务账户

大多数环境使用默认的服务账户配置。 只有在需要在扩展操作之间移除系统管理员固定服务器角色中的 SQL Server 数据库引擎服务账户时,才使用以下操作。

要使用最小权限模式,SQL Server 数据库引擎服务账户必须是每个 SQL Server 实例中系统管理员固定服务器角色的成员。 该会员资格允许系统自动授予或撤销权限。 默认情况下,SQL Server 数据库引擎服务账户是系统管理员固定服务器角色的成员。

在以下情况下,SQL Server 的 Azure 扩展会以 NT AUTHORITY\SYSTEM 身份运行一个名为 Deployer.exe 的临时进程:

  • 你可以启用或禁用功能
  • 你添加或移除 SQL Server 实例
  • 你安装或升级扩展

Deployer.exe连接到SQL Server时模拟SQL Server服务帐户。 连接后,它会根据启用或禁用哪些功能在服务器和数据库角色中添加或删除权限。 此过程可确保SQL Server的 Azure 扩展使用所需的最低权限。

如果要通过更多控制来管理此过程,以便SQL Server服务帐户不是 sysadmin固定服务器角色的成员,请按照以下步骤操作:

  1. 在安装或升级扩展、启用或禁用某个功能,或添加或移除 SQL Server 实例之前,先将 SQL Server 数据库引擎服务账户临时添加到系统管理员固定服务器角色中。
  2. 允许 Deployer.exe 至少运行一次,以便设置权限。
  3. 从 sysadmin 固定服务器角色中删除SQL Server服务帐户。

每当安装或升级扩展、启用或禁用某个功能,或添加或移除 SQL Server 实例时,请重复此过程。 该程序允许 Deployer.exe 授予最少的权限。

因为每次扩展升级都必须重复这个流程,建议禁用自动升级。 然后你可以用脚本完成这些步骤并升级扩展。

Important

适用于 SQL Server 的 Azure 扩展 Deployer.exe 要求 NT AUTHORITY\SYSTEM 能够使用 CONNECT SQL 权限以 standard 和 least privilege 模式连接到 SQL Server。 存在此要求,因为 Deployer.exe 始终在 LocalSystem 帐户下运行,而不管扩展在预配后使用哪个服务帐户。

如果 NT AUTHORITY\SYSTEM 无法连接到SQL Server,Deployer.exe无法创建 NT SERVICE\SqlServerExtension 登录名或授予所需的权限。 在启用最低特权模式之前,请验证 NT AUTHORITY\SYSTEM 具有具有 CONNECT SQL 权限的活动SQL Server登录名。 欲核实,请参见 先决条件。

如果 SQL Server 数据库引擎服务账户没有系统管理员固定服务器角色,就无法授予即时权限。

有关这些权限的具体使用时间,请参见“配置 Windows 服务账户和权限,适用于 Azure Extension for SQL Server”。