【发布时间】:2020-11-16 10:59:07
【问题描述】:
我正在使用以下代码将使用 VB.Net 的 SQL Server 数据库备份到其他物理位置。但是在尝试将其保存在客户端 PC 中时出现以下错误。在某些客户端中,它适用于外部硬盘驱动器,但并非适用于所有客户端。
无法打开备份设备“D:\11-16-2020_POS_DB_MM.bak”。操作系统错误 5(访问被拒绝。)
BACKUP DATABASE 异常终止。
我了解这是由于用户权限而发生的错误。是否可以在我的代码中纠正这个问题,或者我是否总是必须在每个客户端中设置用户权限(数据库在服务器中并且有多个客户端。我使用安装包部署在客户端上)
Public Class frmBackup
Private connString As String = "Data Source=SQLSERVER\SLMA;Database=master;User Id=sa;Password =" & dbPwd & ";"
Private con As SqlConnection = New SqlConnection(connString)
Private Sub cmbbackup_Click(sender As Object, e As EventArgs) Handles cmbbackup.Click
Try
SaveFileDialog1.FileName = DateAndTime.DateString + "_" + dbName
SaveFileDialog1.Filter = "SQL Server database backup files|*.bak"
SaveFileDialog1.ShowDialog()
Dim cmd As New SqlCommand("BACKUP DATABASE " & dbName & " To disk='" & SaveFileDialog1.FileName & "'", conn)
If Not conn.State = ConnectionState.Open Then
conn.Open()
End If
cmd.ExecuteNonQuery()
conn.Close()
MsgBox("The database was successfully backup to - " & System.IO.Path.GetFullPath(OpenFileDialog1.FileName))
Catch ex As Exception
MsgBox(Err.Description)
Me.Close()
End Try
End Sub
End Class
【问题讨论】:
-
错误似乎在告诉你问题所在;运行 SQL Server 的服务帐户无权访问您要备份到的目标。这不是您可以在您的 VB 代码中修复的东西,它需要从您的网络管理员端完成。同样不要忘记,任何路径都是从 instances 的角度出发的,而不是用户的。
D:\将与安装在D上的设备有关,该用户在运行 SQL Server 的实例上运行 SQL Server;这可能是第二个本地存储设备。如果是网络,您应该使用 UNC 路径。 -
请您的网络管理员确保运行 SQL 实例的服务帐户有权访问运行实例的主机上的本地存储设备
D。 -
取决于您的目标。例如,我仍然不知道
D:是实例本地还是用户本地。如果是用户,当然不是作为 SQL 实例的 Service Account 不应该对域有那么多的访问权限。如果您在本地需要,您通常会备份然后将备份复制到本地位置;或将其放在网络位置并从网络路径本地RESTORE。 -
那就看我的prior comment。
-
老实说,这有一种 XY Problem 的强烈气味。无权访问服务器的用户不应为其创建备份。顺便说一句,该应用程序很容易被注入;特别是当您为应用程序使用
saLOGIN时。
标签: sql-server database vb.net