Sql-Server

無法在 Docker 中恢復特定的 SQL Server 數據庫

  • June 15, 2022

我在 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 數據提供者)

如需幫助,請點擊:https ://docs.microsoft.com/sql/relational-databases/errors-events/mssqlserver-3201-database-engine-error

伺服器名稱: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 開始,讓它工作,然後嘗試退出。

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