mssql '5 (Access is denied.)' 还原数据库时出错

Posted

技术标签:

【中文标题】mssql \'5 (Access is denied.)\' 还原数据库时出错【英文标题】:mssql '5 (Access is denied.)' error during restoring databasemssql '5 (Access is denied.)' 还原数据库时出错 【发布时间】:2011-03-30 11:51:24 【问题描述】:

我想通过 SQL Server Management Studio 从文件中恢复数据库(任务 → 恢复 → 数据库;从设备中选择并选择文件后)。

之后,我收到此错误:

操作系统在尝试时返回错误“5(访问被拒绝。)” 'E:\Program Files\Microsoft SQL 上的'RestoreContainer::ValidateTargetForCreation' 服务器\MSSQL10.MSSQLSERVER\MSSQL\DATA\XXXXXX.mdf'。 消息 3156,级别 16,状态 8,服务器 XXXX,第 2 行

我该如何解决这个问题?是安全错误吗?

【问题讨论】:

【参考方案1】:

运行 sql server 的帐户无权访问您拥有备份文件或尝试将数据库还原到的位置。您可以使用 SQL Server 配置管理器 查找用于运行 SQL Server 实例的帐户,然后确保该帐户完全控制 .BAK 文件和 MDF 将被还原的文件夹到。

【讨论】:

我将“NT Service\MSSQLSERVER”用户添加到允许的“组或用户名”列表中并且它有效 我需要将此用户分配给 FILE 的安全性,文件夹不够。【参考方案2】:

我刚刚遇到了同样的问题,但有不同的解决方法。基本上,我的计算机上同时安装了 SQL Server 和 SQL Server Express。这在我尝试恢复到 SQL Express 时不起作用,但在我将其恢复到 SQL Server 时正常工作。

【讨论】:

+1 这可能是一个特别讨厌的场景,会导致在调试错误时浪费太多时间【参考方案3】:

我发现了这个,它对我有用:

CREATE LOGIN BackupRestoreAdmin WITH PASSWORD='$tr0ngP@$$w0rd'
GO
CREATE USER BackupRestoreAdmin FOR LOGIN BackupRestoreAdmin
GO
EXEC sp_addsrvrolemember 'BackupRestoreAdmin', 'dbcreator'
GO
EXEC sp_addrolemember 'db_owner','BackupRestoreAdmin'
GO

【讨论】:

你能详细说明它的作用吗? 已经 8 年了......但它创建了一个带有密码的登录名,然后是该登录名的用户,然后从 member role 和 db owner 的 sp_ 命令添加角色,允许 BackRestoreAdmin成为 dbcreator 和 db_owner【参考方案4】:

我最近遇到了这个问题。我的解决方法是转到“还原数据库”对话框的“文件”页面并选中“将所有文件重新定位到文件夹”。

【讨论】:

谢谢。就我而言,这是最好的解决方案,因为源数据库位于我打算从系统中删除的驱动器上。搬迁是搬迁的必要组成部分。 谢谢!这解决了这个问题。我在多个用户帐户上的同一个文件中遇到了这个问题,并且在管理员模式下运行。 非常适合我,谢谢! 感谢您的帮助,您拯救了我的一天! 在同一个机器上恢复到新的 SQL 版本时,这是一个很好的捕捉。我没有注意到我正在尝试恢复到新服务帐户无权访问的旧版本目录。 (MSSQL14.MSSQLSERVER 与 MSSQL15.MSSQLSERVER)【参考方案5】:

就我而言,我必须在Restore Database 页面上的Options 标签下选中Overwrite the existing database (WITH REPLACE) 中的框。

我收到此错误的原因:因为数据库已经存在一个 MDF 文件并且它没有被覆盖。

希望这会对某人有所帮助。

【讨论】:

【参考方案6】:

如果您要附加数据库,请查看“要附加的数据库”网格,特别是在您指定 .mdf 文件后的所有者列中。记下该帐户并对 mdf 和 ldf 文件授予完全权限。

【讨论】:

【参考方案7】:

我尝试了上述情况并得到相同的错误 5(访问被拒绝)。我进行了深入研究,发现文件 .bak 应该可以访问 SQL 服务帐户。如果不确定,请在开始 -> 运行中键入 services.msc,然后检查 SQL 服务登录帐户。

然后转到该文件,右键单击并在“属性”中选择“安全”选项卡,然后编辑以添加新用户。

最后再给予它完全的权限,以便给予完全的访问权。

然后从 SSMS 尝试恢复备份。

【讨论】:

您的代表人数不足,无法直接附上屏幕截图,因此请将链接粘贴到此帖子的评论中,有人会为您添加。 这是唯一适用于我认为没有 .BAK 文件的问题的实体框架样式实例的上下文的答案。 (代码优先 - 实体框架 - 初始数据库种子迁移)非常感谢 - 我花了几个小时寻找有意义的答案!【参考方案8】:

我在尝试在 SQL 2012 数据库中恢复 SQL 2008 R2 备份数据库时遇到了同样的错误。我猜该错误是由于在 C 盘中放置 .mdf 和 .ldf 文件的权限不足。我尝试了一件简单的事情,然后我成功地恢复了它。

试试这个:

在“还原数据库”向导窗口中,转到“文件”选项卡,将还原目标从 C: 更改为其他驱动器。然后继续进行常规恢复过程。一定会成功恢复的!

希望这对您也有帮助。干杯:)

【讨论】:

【参考方案9】:

嗯,就我而言,解决方案非常简单直接。

我只需要更改 log On As 的值。

解决步骤-

    打开Sql Server Configuration managerclick on SQL Server (MSSQLSERVER) 转至Properties

    log On As 值更改为 LocalSystem

希望这对你也有帮助:)

【讨论】:

经过数小时的不同权限处理。这(将登录更改为值)解决了我的问题。谢谢!【参考方案10】:

我遇到了完全相同的问题,但我的解决方法不同 - 我的公司正在加密我机器上的所有文件。解密文件后,MSSQL 访问和创建数据库没有任何问题。只需右键单击 .bak 文件 -> 属性 -> 高级... -> 加密内容以保护数据。

【讨论】:

我不确定为什么这个答案被否决了。我遇到过同样的问题。权限一切正常,但由于文件被标记为加密,SQL 在从文件中读取内容时引发访问被拒绝。【参考方案11】:

这件事今天早些时候发生在我身上,我是本地服务器管理员组的成员,并且可以不受阻碍地访问,或者我是这么认为的。即使实例中没有这样的数据库,我也勾选了“替换”选项。

发现那里曾经有同名的DB,MDF和LDF文件仍然物理位于服务器的数据和日志文件夹中,但sys.databases中缺少实际的元数据。 SQL Server 的服务帐户也不能overwrwrite 现有文件。还发现文件的所有者是“未知的”,我不得不将所有权更改为上面的 2 个文件,以便它现在归本地服务器的管理员组所有,然后重命名。

最后,它成功了。

【讨论】:

【参考方案12】:

此错误有多种原因,我收到此错误是因为我在“还原数据库”窗口的“文件”选项卡中选中了“将所有文件重新分配到文件夹”,但我的本地计算机上不存在默认路径。我将 ldf/mdf 文件放在另一个文件夹中,一旦更改,我就可以恢复。

【讨论】:

【参考方案13】:

该帐户无权访问备份文件的位置。 采取以下步骤,通过计算机管理器轻松访问 SQL Server 配置管理器

    单击 Windows 键 + R 打开“运行”窗口。 在“打开:”框中键入 compmgmt.msc。 点击确定。 扩展服务和应用程序。 展开SQL Server 配置管理器。 在登录身份选项卡中更改用户帐户。

现在您可以轻松恢复数据库

【讨论】:

【参考方案14】:

一个可行的好解决方案是转到文件>并检查重新分配所有文件

【讨论】:

【参考方案15】:

我的解决方法是在尝试还原数据库并将路径更改为新路径时进入选项。 Here is the screenshot

【讨论】:

以上是关于mssql '5 (Access is denied.)' 还原数据库时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用python os.rmdir时,得到PermissionError: [WinError 5] Access is denied

即使应用程序以管理员身份运行,SetNamedSecurityInfo() 函数也会返回 ACCESS_IS_DENIED(Winerror.h 中的错误代码 5)

403 - Forbidden: Access is denied. 是啥意思啊?! 如何解决?

无法上传文件出现550 Access is denied错误

Tomcat 启动出错了 access is denied

报错:PermissionError: [WinError 5] Access is denied: 'C:\Program Files\Anaconda3\Lib\site-pack(代码片