Sql-Server

Linux 上的 SQL Server,用於創建備份的文件系統權限問題

  • February 19, 2022

我正在嘗試將 SQL Server 備份到不同使用者應該有權訪問的目錄。為此,我創建了一個使用者組,並在其中包含 mssql 使用者 - 但是當我嘗試創建備份時,出現“拒絕訪問”錯誤。

這是我所做的:

  1. 創建使用者組:
sudo groupadd sample_group`
  1. mssql使用者添加到新組:
sudo usermod -a -G sample_group mssql
  1. 命令的結果cat /etc/group | grep mssql是:
mssql:x:999:
sample_group:x:1006:mssql
  1. 創建目錄:
sudo mkdir /tmp/backup_dir/
  1. sample_group使用者組添加到目錄並為此目錄提供 previligious:
sudo chgrp sample_group /tmp/backup_dir/
須藤 chmod 771 /tmp/backup_dir/
  1. 命令的結果sudo ls -l /tmp/ | grep sample_group是:
drwxrwx--x 2 root sample_group 4096 Feb 18 12:11 backup_dir
  1. 嘗試在此目錄中備份:
sqlcmd -U sa -P ********* -Q "備份數據庫 AdventureWorks TO disk='/tmp/backup_dir/1.bak'"

->

消息 3201,級別 16,狀態 1,伺服器 ubuntuAutoTest,第 1 行
無法打開備份設備“/tmp/backup_dir/1.bak”。作業系統錯誤 5(拒絕訪問。)。
消息 3013,級別 16,狀態 1,伺服器 ubuntuAutoTest,第 1 行

為什麼沒有訪問權限?SQL Server 以mssql使用者身份執行。mssql使用者在sample_group組中,該組擁有/tmp/backup_dir/目錄

筆記:

如果我使用chmod 777,則代表mssql使用者創建備份,創建的文件歸mssql使用者組所有。

如果我將mssql使用者組指定為目錄的所有者,則會創建備份。

/tmp/backup_dir/如果我代表mssql使用者( )進入目錄sudo su - mssql,那麼我可以創建文件,沒有任何問題,有所有權限。

對於 PostgreSQL 數據庫,按照上述步驟操作沒有問題。僅使用postgres使用者而不使用mssql使用者。

mssql 在獲取新組之前需要再次登錄。最簡單的方法是重新啟動該伺服器。

替代解決方案:

將需要讀取備份的使用者添加到 sample_group,然後

chown mssql:sample_group /tmp/backup_dir
chmod 2750 /tmp/backup_dir

sqlcmd -U sa -P ********* -Q "backup database AdventureWorks TO disk='/tmp/backup_dir/1.bak'"

測試使用者是否可以讀取備份(將取決於 mssql 的 umask),如果不能:

chmod a+r /tmp/backup_dir/1.bak

引用自:https://dba.stackexchange.com/questions/307688