无法在 Docker 中恢复特定 SQL Server 数据库

Lov*_*694 3 sql-server docker

我在 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(字符串 sqlCommand,布尔重试)
在 Microsoft.SqlServer.Management.Smo.ExecutionManager.ExecuteWithResults(字符串查询,布尔重试)
在 Microsoft.SqlServer.Management.Smo.BackupRestoreBase.ExecuteSqlWithResults (服务器服务器,字符串cmd)
在Microsoft.SqlServer.Management.Smo.Restore.ReadBackupHeader(服务器srv)
在Microsoft.SqlServer.Management.RelationalEngineTasks.RestoreUtil.GetSourceDbNames(ICollection`1 bkdevList,字符串凭据,IBackgroundOperationContext backgroundContext)
在Microsoft。 SqlServer.Management.RelationalEngineTasks.RestoreDatabaseDialogController.<>c__DisplayClass8.b__7(IBackgroundOperationContext backgroundContext)

无法打开备份设备“/var/opt/mssql/backup/Keycloak.bak”。操作系统错误 5(访问被拒绝。)。
RESTORE HEADERONLY 异常终止。(.Net SqlClient 数据提供程序)

如需帮助,请单击: https: //learn.microsoft.com/sql/relational-databases/errors-events/mssqlserver-3201-database-engine-error

服务器名称:155.155.155.155,1433
错误号:3201
严重性:16
状态:2
行号:1

您能告诉我如何授予此访问权限吗?这将是很大的帮助。我看到这个堆栈问题,但我不知道这个人如何没有找到访问被拒绝的问题。

Tho*_*m A 7

在 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
Run Code Online (Sandbox Code Playgroud)

您可能还希望确保在该文件夹中创建的任何文件都继承组所有者,这样,如果您复制进一步的备份,它们就归该组所有mssql。您可以执行以下操作:

sudo chmod +s /var/opt/mssql/backup
Run Code Online (Sandbox Code Playgroud)

然后再试RESTORE一次。

如果您不是该mssql组的成员,一旦更改目录的所有者,您将失去对该目录的访问权限。因此,您可以使用以下命令将自己添加到该组中:

sudo usermod -aG mssql {your user}
Run Code Online (Sandbox Code Playgroud)

显然,您需要替换{your user}为您的用户。但是,组不会立即应用,您需要重新连接到主机或模拟自己。

或者,您可以将 的用户所有者更改backup为您自己,并使该组mssql也是所有者;(虽然我个人认为将mssql组添加到您的用户是更好的选择):

sudo chown {youruser}:mssql /var/opt/mssql/backup -R
Run Code Online (Sandbox Code Playgroud)