本文介绍 Linux 上的 SQL Server 所需的服务帐户和文件系统权限。 有关 Windows 权限上的 SQL Server 的详细信息,请参阅 配置 Windows 服务帐户和权限。
内置 Windows 原则
尽管 Linux 上的 SQL Server 在操作系统帐户下 mssql 运行,但 SQL Server 层中存在以下 Windows 主体,以保持兼容。 除非完全了解风险,否则不要删除或拒绝它们。
| 校长 | 默认 SQL Server 角色 | 详细信息 |
|---|---|---|
BUILTIN\Administrators |
sysadmin | 映射到主机根级管理员。 某些系统对象在此帐户的上下文中运行。 |
NT AUTHORITY\SYSTEM |
公共 | 为WindowsSYSTEM账户保留的安全标识符(SID)。 仍然设计成让期望它的跨平台脚本成功。 |
NT AUTHORITY\NETWORK SERVICE |
无(仅兼容性) | 以前,Windows 上多个 SQL Server 服务的默认启动帐户。 此功能仅为向后兼容性而存在。 SQL Server 本身在 Linux 数据库引擎中未使用此项。 |
文件和目录所有权
mssql用户和mssql组(mssql:mssql)必须拥有文件夹下/var/opt/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。 使用备份初始化时可能需要系统管理员 |
| 分发智能体(推送) | mssql |
分销商到订阅者 | 分发中的db_owner;订阅数据库中的db_owner。 读取快照文件夹。 PAL 成员。 |
| 分发智能体(拉取) |
mssql(在订阅服务器上) |
订阅服务器到分发服务器 分销商到订阅者 |
与分发智能体(推送)相同,但快照共享权限在订阅服务器主机上生效 |
| 合并代理人 | mssql |
发布者、分发者、订阅者 | 分发中的 db_owner。 PAL 成员。 读取快照文件夹。 在发布与订阅数据库中具有读/写权限。 |
| 队列读取器代理 | mssql |
分发器 | 分发中的 db_owner。 在发布数据库中使用 db_owner 连接到 Publisher。 |
最佳做法
mssql SQL Server 使用的用户和组默认是非登录账户。 为了安全起见,保持这样。 尽可能使用Windows 身份验证进行 Linux 上的 SQL Server。 有关如何为 Linux 上的 SQL Server 配置 Windows 身份验证的详细信息,请参阅 教程:使用 adutil 为 Linux 上的 SQL Server 配置 Active Directory 身份验证。
每当目录不需要组访问时,进一步限制文件权限(使用命令 chmod 700)。
当将主机目录或NFS共享绑定到容器或虚拟机时,先创建它们,然后映射UID 10001 (默认映射)。mssql
避免向应用程序登录授予 系统管理员权限。 改用细粒度角色,并使用 EXECUTE AS 包装器。 创建另一个系统管理员账户后,禁用或重命名该sa账户。 有关详细信息,请参阅 “禁用 SA 帐户”作为最佳做法。