本文介绍 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 |
包括 master、model、tempdb,以及任何新数据库,除非 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 10001(mssql 的默认值)。
避免向应用程序登录授予 系统管理员权限。 改用细粒度角色,并使用 EXECUTE AS 包装器。 创建另一个 sa 帐户后,禁用或重命名该 帐户。 有关详细信息,请参阅 “禁用 SA 帐户”作为最佳做法。