Sql-Server
Linux 上的 SQL Server,用於創建備份的文件系統權限問題
我正在嘗試將 SQL Server 備份到不同使用者應該有權訪問的目錄。為此,我創建了一個使用者組,並在其中包含 mssql 使用者 - 但是當我嘗試創建備份時,出現“拒絕訪問”錯誤。
這是我所做的:
- 創建使用者組:
sudo groupadd sample_group`
- 將
mssql
使用者添加到新組:sudo usermod -a -G sample_group mssql
- 命令的結果
cat /etc/group | grep mssql
是:mssql:x:999: sample_group:x:1006:mssql
- 創建目錄:
sudo mkdir /tmp/backup_dir/
- 將
sample_group
使用者組添加到目錄並為此目錄提供 previligious:sudo chgrp sample_group /tmp/backup_dir/ 須藤 chmod 771 /tmp/backup_dir/
- 命令的結果
sudo ls -l /tmp/ | grep sample_group
是:drwxrwx--x 2 root sample_group 4096 Feb 18 12:11 backup_dir
- 嘗試在此目錄中備份:
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