無法在 Docker 中恢復特定的 SQL Server 數據庫
我在 Docker 中創建了一個 SQL Server,並且可以從 SQL Server Management Studio 成功連接到它。我將備份文件
mybackup.bak
從我的伺服器複製到 Docker SQL 容器路徑/var/opt/mssql/backup/
。我可以在我的 SQL Server Management Studio 中看到這個文件,但是當我嘗試恢復它時,我收到“拒絕訪問”錯誤。
執行 Transact-SQL 語句或批處理時發生異常。(Microsoft.SqlServer.ConnectionInfo)
節目地點:
在 Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteWithResults(String sqlCommand, Boolean retry)
在 Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteWithResults(String query, Boolean retry)
在 Microsoft.SqlServer.Management.Smo.BackupRestoreBase.ExecuteSqlWithResults Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreUtil.GetSourceDbNames(ICollection`1 bkdevList, String credential, IBackgroundOperationContext backgroundContext)的
Microsoft.SqlServer.Management.Smo.Restore.ReadBackupHeader(Server srv)的(伺服器伺服器,字元串 cmd) 。 SqlServer.Management.RelationalEngineTasks.RestoreDatabaseDialogController.<>c__DisplayClass8.b__7(IBackgroundOperationContext backgroundContext)
無法打開備份設備“/var/opt/mssql/backup/Keycloak.bak”。作業系統錯誤 5(拒絕訪問。)。
RESTORE HEADERONLY 異常終止。(.Net SqlClient 數據提供者)
伺服器名稱:155.155.155.155,1433
錯誤號:3201
嚴重性:16
狀態:2
行號:1
您能否告訴我如何授予此訪問權限。這將是很大的幫助。我看到了這個堆棧問題,但我不知道這個人怎麼沒有發現拒絕訪問的問題。
在 Linux 上,SQL Server 服務帳戶在名為
mssql
. 預設情況下,目錄/var/opt/mssql
及其內容也歸使用者和組所有mssql
。
backup
不是此目錄中的預設文件夾,因此大概是您自己創建的。但是,如果您創建了該目錄,則預設情況下它不會擁有mssql
,並且可能是/曾經由您的使用者和組擁有users
。因此,您需要更改所述目錄的所有者。我還假設您是
mssql
此處組的成員,因此希望使用者和組所有者相同sudo chown mssql: /var/opt/mssql/backup -R sudo chmod 775 /var/opt/mssql/backup -R
您可能還希望確保在該文件夾中創建的任何文件都繼承組所有者,這樣如果您複製更多備份,它們就歸該組所有
mssql
。您可以執行以下操作:sudo chmod +s /var/opt/mssql/backup
然後再試
RESTORE
一次。如果您不是該
mssql
組的成員,一旦您更改目錄的所有者,您將無法訪問它。因此,您可以通過以下方式將自己添加到組中:sudo usermod -aG mssql {your user}
顯然,您需要替換
{your user}
為您的使用者。但是,組不會立即應用,您需要重新連接到主機或冒充自己。或者,您可以將使用者所有者更改為您
backup
自己,並使該組mssql
也是所有者;(雖然我個人認為將mssql
組添加到您的使用者是一個更好的選擇):sudo chown {youruser}:mssql /var/opt/mssql/backup -R
您必須授予文件夾權限
/var/opt/mssql/備份/
看:
https://stackoverflow.com/a/45973108/214977
從 777 開始,讓它工作,然後嘗試退出。