本文介绍 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 |
sysadmin (无固定角色) | 以前,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 目录
| 目的 | 默认路径 | 详细信息 |
|---|---|---|
| 系统和用户数据库 | /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 角色
| 代理人 | 以 (Linux) 身份运行 | 连接到 | 所需的数据库角色/权限 |
|---|---|---|---|
| 快照代理 |
mssql (通过 SQL 代理作业) |
Distributor | 在分发数据库中的db_owner; 在快照文件夹上进行读/写操作 |
| 日志读取代理 | mssql |
发布者和分发者 | 在发布数据库和分发机制中具有db_owner权限。 使用备份初始化时可能需要 sysadmin |
| 分发代理 (推送) | mssql |
分销商到订阅者 | 分发中的db_owner;订阅数据库中的db_owner。 读取快照文件夹。 PAL 成员。 |
| 分发代理(拉取模式) |
mssql (在订阅服务器上) |
订阅者到分发者 分发器到订阅者 |
与分发代理(推送)相同,但快照共享权限适用于订阅服务器主机 |
| 合并代理 | mssql |
发布者、分发者、订阅者 | 用于分发的db_owner 。 PAL 成员。 读取快照文件夹。 发布和订阅数据库中的读/写。 |
| 队列读取器代理 | mssql |
Distributor | 分发中的db_owner 。 在发布数据库中使用 db_owner 连接到 Publisher。 |
最佳做法
mssql默认情况下,SQL Server 使用的用户和组是非登录帐户,应以这种方式保留。 出于安全考虑,请尽可能对 Linux 上的 SQL Server 使用 Windows 身份验证。 有关如何为 Linux 上的 SQL Server 配置 Windows 身份验证的详细信息,请参阅 教程:使用 adutil 为 Linux 上的 SQL Server 配置 Active Directory 身份验证。
每当目录不需要组访问时,进一步限制文件权限(使用命令 chmod 700)。
在将主机目录或 NFS 共享绑定到容器或虚拟机时,请首先创建这些目录或共享,然后映射 UID 10001(mssql的默认值)。
避免向应用程序登录授予 系统管理员权限。 请改用细粒度角色和 EXECUTE AS 包装器。 创建另一个 sysadmin 帐户后,禁用或重命名该 sa 帐户。 有关详细信息,请参阅 “禁用 SA 帐户”作为最佳做法。