使用最低特权操作 Azure Arc 启用的 SQL Server

适用范围:SQL Server

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

请按照本文中介绍的步骤,配置使用最低特权运行该服务(可选)。 目前,该服务不自动使用最低特权运行。

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

注意

具有扩展(从 2024 年 11 月 版本或更高版本开始)的现有服务器将自动应用最低特权配置。 此应用将逐渐实现。

要防止自动应用最低特权,请阻止将扩展升级到 2024 年 11 月版本。

配置代理扩展服务使用最低特权运行后,它使用 NT Service\SQLServerExtension 服务帐户。

NT Service\SQLServerExtension 帐户为本地的 Windows 服务帐户:

  • 启用最低特权选项后,由适用于 SQL Server 的 Azure Extension 创建和管理。
  • 在 Windows 操作系统上已授予运行适用于 SQL Server 服务的 Azure 扩展所需的最低权限和特权。 仅有权访问用于读取和存储配置或写入日志的文件夹和目录。
  • 利用专供具有最低所需权限的服务帐户使用的新登录,在 SQL Server 中授予的连接和查询权限。 最低权限取决于启用的功能。
  • 当权限不再是必需时更新。 例如,如果禁用某项功能、禁用最低特权配置或卸载适用于 SQL Server 的 Azure 扩展,则会撤销权限。 吊销可确保不再需要权限后,权限不再存在。

先决条件

本部分介绍完成本文中的示例所需的系统需求和工具。

系统要求

具有最低特权的配置需要以下条件:

  • Windows Server 2012 或更高版本
  • SQL Server 2012 或更高版本
  • SQL Server 服务帐户必须是 sysadmin 固定服务器角色的成员
  • 所有数据库都必须联机且可更新

Linux 目前不支持具有最低特权的配置。

其他要求(如先决条件 – 已启用 Azure Arc 的 SQL Server 中所列)仍适用。

SQL Server 服务帐户

默认情况下,SQL Server 服务帐户是 sysadmin 固定服务器角色的成员。

如先决条件中所列,SQL Server 服务帐户必须是每个 SQL Server 实例上 sysadmin 固定服务器角色的成员。 适用于 SQL Server 的 Azure 扩展有一个名为 Deployer.exe 的进程,该进程在以下情况下暂时作为 NT AUTHORITY\SYSTEM 运行:

  • 功能处于启用或禁用状态
  • 已添加或移除 SQL Server 实例

Deployer.exe 模拟 SQL Server 服务帐户连接到 SQL Server,并根据启用或禁用的功能添加或移除服务器和数据库角色中的权限,以确保适用于 SQL Server 的 Azure 扩展使用所需的最低特权。 要修改这些权限,SQL Server 服务帐户必须是 sysadmin 服务器角色的成员。

如果希望以更大的掌控程度管理此过程,以便 SQL Server 服务帐户并非始终都是 sysadmin 服务器角色的成员,请按照以下步骤操作:

  1. 将 SQL Server 服务帐户临时添加到 sysadmin 服务器角色。
  2. 允许 Deployer.exe 至少运行一次,以便设置权限。
  3. 从 sysadmin 角色中移除 SQL Server 服务帐户。

每次启用或禁用功能,或添加 SQL Server 实例时,请重复此过程,以允许 Deployer.exe 授予所需的最低特权。

工具

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

启用最低特权

  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。 若要完成此任务,请运行包含 <resource-group><machine-name> 更新值的以下命令。

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

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

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

验证最低特权配置

如果验证是否将 Azure Arc 启用的 SQL Server 配置为使用最低特权运行:

  1. 在 Windows 服务中,找到 Windows SQL Server 扩展服务服务。 验证服务是否在下方作为服务帐户 NT Service\SqlServerExtension 运行。 

  2. 在服务器中打开任务计划程序,并检查在 Microsoft\SqlServerExtension 下创建名为 SqlServerExtensionPermissionProvider 的事件驱动任务。

    注意

    在 2024 年 7 月发布之前,SqlServerExtensionPermissionProvider 是一项计划任务。 每小时运行一次。

    在服务器中打开任务计划程序,并检查在 Microsoft\SqlServerExtension 下创建名为 SqlServerExtensionPermissionProvider 的计划任务。

  3. 打开 SQL Server Management Studio 并检查名为 NT Service\SqlServerExtension 的登录。 验证是否为帐户分配以下权限:

    • 连接 SQL
    • 查看数据库状态
    • 查看服务器状态
  4. 使用以下查询验证权限:

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

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

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

    EXECUTE AS LOGIN = 'NT Service\SqlServerExtension'  
    USE <database name>; 
    SELECT * FROM fn_my_permissions (NULL, 'database");