Linux 上的 SQL Server 的安全與權限指南

本文說明 Linux 上 SQL Server 所需的服務帳戶和檔案系統許可權。 如需 Windows 上 SQL Server 權限的詳細資訊,請參閱 設定 Windows 服務帳戶和權限

內建 Windows 原則

雖然Linux 上的 SQL Server在 mssql 作業系統帳號下執行,但以下Windows原則存在於SQL Server層以促進相容性。 除非您完全了解風險,否則不要刪除或否認它們。

校長 預設 SQL Server 角色 詳細資料
BUILTIN\Administrators sysadmin 映射到主機的根級管理員。 某些系統物件會在此帳戶的內容中執行。
NT AUTHORITY\SYSTEM public 安全識別碼(SID)保留給 Windows SYSTEM 帳號。 還是為了讓期待它的跨平台腳本成功而設計。
NT AUTHORITY\NETWORK SERVICE 無(僅相容性) 歷史上它是 Windows 上多個 SQL Server 服務的預設啟動帳號。 僅為向後相容性而存在。 Linux 上的 SQL Server 資料庫引擎本身不會使用此功能。

檔案和目錄擁有權

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 包含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 角色

代理程式 執行方式 (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 驗證 for Linux 上的 SQL Server。 如需如何設定 Linux 上 SQL Server 的 Windows 驗證的詳細資訊,請參閱 教學課程:使用 adutil 設定 Linux 上 SQL Server 的 Active Directory 驗證

每當目錄不需要群組存取時,請進一步限制檔案許可權 (使用命令 chmod 700)。

當將主機目錄或 NFS 共享綁定到容器或虛擬機器時,先建立它們,然後對應 UID 10001 (預設為 mssql)。

避免將 系統管理員 授與應用程式登入。 請改用細微角色和 EXECUTE AS 包裝函式。 建立另一個系統管理員帳號後,請停用或重新命名該sa帳號。 如需詳細資訊,請參閱 停用 SA 帳戶作為最佳實務