Linux 上的 SQL Server - 安全性和权限指南

本文介绍 Linux 上的 SQL Server 所需的服务帐户和文件系统权限。 有关 Windows 权限上的 SQL Server 的详细信息,请参阅 配置 Windows 服务帐户和权限

Windows 内置主体

尽管 Linux 上的 SQL Server 在操作系统帐户下 mssql 运行,但 SQL Server 层中存在以下 Windows 主体,以保持兼容。 除非完全了解风险,否则不要删除或拒绝它们。

校长 默认 SQL Server 角色 详细信息
BUILTIN\Administrators sysadmin 映射为主机的根级管理员。 某些系统对象在此帐户的上下文中运行。
NT AUTHORITY\SYSTEM 公共 为 Windows SYSTEM 帐户保留的服务标识符(SID)。 仍保留该主体,以确保依赖它的跨平台脚本能够正常运行。
NT AUTHORITY\NETWORK SERVICE 无(仅兼容性) 以前,Windows 上多个 SQL Server 服务的默认启动帐户。 此功能仅为向后兼容性而存在。 SQL Server 本身在 Linux 数据库引擎中未使用此项。

文件和目录所有权

文件夹 /var/opt/mssql 下的所有文件都必须由 mssql 用户和 mssql 组(mssql:mssql)拥有,并且具有两者的读写访问权限。 如果更改默认的 umask (0022),或使用备用装入点,则必须手动重新应用这些权限。

文件夹的默认权限 mssql 如下所示:

drwxr-xr-x  3 root  root  4096 May 14 17:17 ./
drwxr-xr-x 13 root  root  4096 Jan  7  2025 ../
drwxrwx---  7 mssql mssql 4096 May 14 17:17 mssql/

文件夹内容 mssql 的默认权限如下所示:

drwxrwx--- 7 mssql mssql 4096 May 14 17:17 ./
drwxr-xr-x 3 root  root  4096 May 14 17:17 ../
drwxr-xr-x 5 mssql mssql 4096 May 14 17:17 .system/
drwxr-xr-x 2 mssql mssql 4096 May 14 17:17 data/
drwxr-xr-x 3 mssql mssql 4096 Sep 16 22:57 log/
-rw-r--r-- 1 root  root    85 May 14 17:17 mssql.conf
drwxrwxr-x 2 mssql mssql 4096 May 14 17:17 secrets/
drwxr-xr-x 2 mssql mssql 4096 May 14 17:17 security/

有关如何更改用户数据位置、日志文件位置或系统数据库和日志位置的详细信息,请参阅 使用 mssql-conf 工具在 Linux 上配置 SQL Server

典型的 SQL Server 目录

Purpose 默认路径 详细信息
系统和用户数据库 /var/opt/mssql/data 包括 mastermodeltempdb,以及任何新数据库,除非 mssql-conf 重定向它们。 有关详细信息,请参阅 更改系统数据库的默认位置
事务日志(如果已分隔) /var/opt/mssql/data,或通过mssql-conf set filelocation.defaultlogdir设置的路径。 若移动事务日志,请保持所有权不变。 有关详细信息,请参阅 更改默认数据或日志目录位置
Backups /var/opt/mssql/data 请在首次备份前,或在映射卷或目录时,使用 chown 创建并设置该主体。 有关详细信息,请参阅 更改默认备份目录位置
错误日志和扩展事件 (XE) 日志 /var/opt/mssql/log 也托管默认的系统健康 XE 会话。 有关详细信息,请参阅 更改默认错误日志文件目录位置
内存转储 /var/opt/mssql/log 用于核心转储和 DBCC CHECK* 转储。 有关详细信息,请参阅 更改默认转储目录位置
安全机密 /var/opt/mssql/secrets 存储 TLS 证书、列主密钥等。

每个代理的 SQL Server 最低权限角色

Agent 以 (Linux) 身份运行 连接到 所需的数据库角色/权限
快照代理 mssql (通过 SQL 代理作业) 分发器 在分发数据库中的db_owner; 在快照文件夹上进行读/写操作
日志读取代理 mssql 发布者和分发者 发布数据库和分发中的 db_owner。 使用备份初始化时可能需要 sysadmin
分发智能体(推送) mssql 分销商到订阅者 分发中的db_owner订阅数据库中的db_owner。 读取快照文件夹。 PAL 成员。
分发智能体(拉取) mssql(在订阅服务器上) 订阅服务器到分发服务器
分销商到订阅者
与分发智能体(推送)相同,但快照共享权限在订阅服务器主机上生效
合并代理人 mssql 发布者、分发者、订阅者 分发中的 db_owner。 PAL 成员。 读取快照文件夹。 在发布与订阅数据库中具有读/写权限。
队列读取器代理 mssql 分发器 分发中的 db_owner。 在发布数据库中使用 db_owner 连接到 Publisher。

最佳做法

默认情况下,SQL Server使用的 mssql 用户和组是非登录帐户,应以这种方式保留。 出于安全考虑,请尽可能对 Linux 上的 SQL Server 使用 Windows 身份验证。 有关如何为 Linux 上的 SQL Server 配置 Windows 身份验证的详细信息,请参阅 教程:使用 adutil 为 Linux 上的 SQL Server 配置 Active Directory 身份验证

每当目录不需要组访问时,进一步限制文件权限(使用命令 chmod 700)。

将主机目录或 NFS 共享绑定到容器或虚拟机时,请先创建它们,然后映射 UID 10001mssql 的默认值)。

避免向应用程序登录授予 系统管理员权限。 改用细粒度角色,并使用 EXECUTE AS 包装器。 创建另一个 sa 帐户后,禁用或重命名该 帐户。 有关详细信息,请参阅 “禁用 SA 帐户”作为最佳做法