恢复数据库期间出现mssql'5(访问被拒绝。)'错误


75

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

在那之后,我得到这个错误:

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

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

Answers:


92

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

在此处输入图片说明


2
我将“ NT Service \ MSSQLSERVER”用户添加到允许的“组或用户名”列表中,并且可以正常工作
slava

181

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

Restore Database dialog


3
谢谢你 就我而言,这是最好的解决方案,因为源数据库位于我打算从系统中删除的驱动器上。搬迁是此举的必要组成部分。
迈克尔·格兰特

谢谢!这解决了问题。我在多个用户帐户的同一文件中以管理员模式运行时遇到了此问题。
Jordan_Walters

非常适合我,谢谢!
丹尼·迈克尔

20

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

我只需要改变价值的log On As价值。

解决步骤-

  1. 打开 Sql Server Configuration manager
  2. click on SQL Server (MSSQLSERVER
  3. Properties

在此处输入图片说明

  1. log On As值更改为LocalSystem

在此处输入图片说明

希望这对您也有帮助:)


3

我只是遇到了同样的问题,但是有不同的解决方法。本质上,我的计算机上同时安装了SQL Server和SQL Server Express。当我尝试还原到SQL Express时,这将不起作用,但是当我将其还原到SQL Server时,此方法将正常工作。


+1这可能是一个特别令人讨厌的情况,导致浪费大量时间调试错误
demongolem 2013年

1

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

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

最后,对它授予完全权限,以便授予完全访问权限。

然后从SSMS尝试还原备份。


1
您的代表还不足以直接附加屏幕截图,因此请将链接粘贴为对此信息的评论,然后有人会为您添加该链接。
内森·塔吉

这是唯一适用于该问题的实体框架样式实例的上下文答案,我认为该实例没有.BAK文件。(代码优先-实体框架-初始数据库种子迁移)您非常感激-我花了几个小时寻找有意义的答案!
米切布(Mitchb)2015年

1

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

尝试这个:

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

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


0

我找到了,它对我有用:

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年的历史了……但是它创建了一个带有密码的登录名,然后创建了该登录名的用户,然后从成员角色和db owner的sp_命令中添加了角色,允许BackRestoreAdmin成为dbcreator,并允许db_owner
Tom Stickel

0

就我而言,我必须选中页面上选项卡Overwrite the existing database (WITH REPLACE)下的框。OptionsRestore Database

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

希望这会帮助某人。


0

如果要附加数据库,请查看“要附加的数据库”网格,尤其是在指定.mdf文件之后的“所有者”列中。记下该帐户,并为它提供mdf和ldf文件的完全权限。


0

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


我不确定为什么这个答案被否决了。我遇到过同样的问题。权限都可以,但是因为文件被标记为加密,所以SQL正在提高从文件读取内容时拒绝访问的权限。
JamieB

0

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

发现那里曾经有同名的DB,并且MDF和LDF文件实际上仍然位于服务器的data和log文件夹中,但是sys.databases中缺少实际的元数据。SQL Server的服务帐户也无法覆盖现有文件。还发现文件的所有者是“未知的”,我不得不将所有权更改为上述2个文件,以便现在由本地服务器的管理员组拥有,然后将其重命名。

然后终于成功了。


0

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

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

现在,您可以轻松还原数据库


0

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

文件重定位



-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.