SQL Server操作系统错误5:“ 5(访问被拒绝。)”


153

我开始学习SQL,并且有一本书提供了要处理的数据库。以下这些文件位于目录中,但问题是,当我运行查询时,它给了我这个错误:

消息5120,级别16,状态101,第1行无法打开物理文件“ C:\ Murach \ SQL Server 2008 \ Databases \ AP.mdf”。操作系统错误5:“ 5(访问被拒绝。)”。

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

在书中,作者说它应该起作用,但就我而言,它不起作用。我进行了搜索,但不确切知道问题出在哪里,因此我发布了此问题。


如果备份文件已经存在,除了确保该服务具有写许可权之外,请确保该文件具有“只读”属性。
jumxozizi

Answers:


133

SQL Server数据库引擎服务帐户必须具有读取/写入新文件夹的权限。

看看这个

要修复,我做了以下工作:

将管理员组添加到文件安全权限中,从而可以完全控制数据文件(S :)和日志文件(T :)。

附加数据库,它可以正常工作。

在此处输入图片说明

在此处输入图片说明


4
有时,SQL Server将在不同于Administrators Group
JDandChips的

57
另外,以管理员身份启动SQL Server Management Studio可能会有所帮助,而不仅仅是服务器服务。
david.barkhuizen 2014年

1
对我来说,以下链接中的解决方案有效:stackoverflow.com/a/19061137/365188
Ozair Kafray 2014年

3
对我来说,将SQL Server代理服务帐户更改为“本地系统”是可行的。
singhm0077

22
如果您的SQL Server实例在服务帐户下运行(例如,mine是MSSQL$SQLEXPRESS),则可能不需要将帐户添加到文件夹权限列表中的方式就很明显了:NT Service\MSSQL$SQLEXPRESS
Brian Lacy

109

一篇旧文章,但这是逐步的方法,适用于在Windows 7下运行的SQL Server 2014:

  • 控制面板->
  • 系统与安全->
  • 管理工具->
  • 服务->
  • 双击SQL Server(SQLEXPRESS)->右键单击“属性”
  • 选择登录选项卡
  • 选择“本地系统帐户”(默认是一些钝的Windows系统帐户)
  • ->好
  • 右键单击,停止
  • 右键单击,开始

瞧!

我认为设置登录帐户可能是安装中的一个选项,但如果不是这样,则不是默认设置,如果您尚未意识到此问题,很容易错过。


5
我已经尝试了很多选项,但是您的答案很好。谢谢mickeyf。
vicky

2
在Win 10下也适用于SQL Server 2014。谢谢。
约翰·弗利

7
-1这样做违背了首先设置此用户的整个想法。这是一项安全功能,因此可以绕开它。
NullUserException

2
WOW .. Cant认为人们只是跳进了这个“答案”。这可能会引起很大的安全问题。否则,没有理由先设置该用户,对吗?无论如何,对于那些不认为这是安全问题的人们来说,这是一个“解决方案”。
curiousBoy

2
任何认为安全比完成工作更重要的人都可以关闭SQL服务器!
伊万

44

为了解决访问被拒绝的问题,我以管理员身份启动了SSMS,这使我可以从本地驱动器附加数据库。该数据库是在另一个SQL和Windows实例中创建的。


3
这是它为我...我只是在寻找一个完全本地设置和得到这个问题,在Windows 10家,以前我做出了MDF和ldf的“所有者”我还有另外一个原因-也许有关
麦克中号

3
这也对我有用。我正在使用Windows 10和Microsoft SQL Server2012。我已经以管理员身份运行SQL Management Studio,然后能够附加Adventure Work Sample数据库。
arsho

1
在工作域环境中运行时,这也解决了Windows 10 Pro的问题。
PerPlexSystem '17

相同-Domain Env,SSMS 2017.x,Win10 Pro。从另一台机器上拆下并连接到新机器上。
TravisWhidden

44

这是与Windows有关的问题,其中SQL Server对包含.bak文件的文件夹没有适当的权限,因此会出现此错误。

最简单的解决方法是将.bak文件复制到具有所有必要权限的默认SQL备份位置。您无需摆弄其他任何东西。在SQL SERVER 2012中,此位置是

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)

@AdamLevitt您是否已安装或先前安装了多个版本的SQL?您确定将其放在正确的位置吗?
哈马德·汗

1
@hmd,谢谢。解决方法是将其导出到2012备份目录中。
亚当·莱维特

1
此解决方案也可在SQL Server 2014中使用。路径为C:\ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King

这应该是答案!!
Axel

我在MS SQL Express 2016中遇到了类似的问题,解决方案是将.mdf文件放在以下文件夹中:C:\ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2


12

是的,正确。首先您应该找到您的sqlserver服务帐户,同时按ctrl + alt + delete可以在任务管理器中看到它;然后,您必须赋予“ C”的读/写特权。 :\ Murach \ SQL Server 2008 \ Databases“到服务帐户。


10

问题是由于缺少对SQL Server访问mdf和ldf文件的权限。所有这些程序将起作用:

  1. 您可以使用具有更好文件特权的用户帐户直接更改MSSQLSERVER服务启动用户帐户。然后尝试附加数据库。
  2. 或者,您可以在mdf和ldf文件属性的安全性选项卡中将用户分配给该文件,并检查其读取和写入权限。
  3. 使用Windows管理员帐户启动,并使用“以管理员身份运行”选项打开SQL Server,并尝试使用Windows身份验证登录,现在尝试附加数据库。


5

对我来说,这是通过SQL Server Management Studio以以下方式解决的-以admin身份登录(我以Windows身份验证登录)-附加mdf文件(右键单击数据库|附加|添加)-以admin身份注销-以as身份登录普通用户


4

此时的实际服务器权限将无关紧要;一切都很好。SQL Server本身需要文件夹权限。
根据您的版本,您可以添加SERVERNAME $ MSSQLSERVER权限来触摸您的文件夹。否则,它必须位于默认的BACKUP目录(安装目录或默认目录为c:\ programfiles(x)\ MSSQL \ BACKUP)中。


2

即使执行以下步骤,您也可能会收到相同的错误消息。

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

我仍然有权限错误,但是随后我注意到在“附加”屏幕中,底部STILL显示了LOG文件,并且错误消息仍然相同。

希望这对做同样事情的人有所帮助。


0

非常简单的解决方案。

  1. 用系统管理员登录
  2. 将您的mdf和ldf文件复制到所有其他数据文件所在的“ C:\ Program Files(x86)\ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA”中。
  3. 现在从那里附加它将起作用

1
您不应将数据存储在程序文件目录中。安装SQl Server时应更改默认位置
OrangeKing89 '17

0

我在应用程序中使用了Entity Framework,并遇到了这个问题,我在文件夹和Windows服务中设置了任何权限,但无法正常工作,之后,我以管理员身份启动了应用程序(右键单击exe文件并选择“以管理员身份运行”),精细。


0

如果您.MDFAPP_DATAVisual Studio项目的文件夹(或放置位置)中的文件上遇到此错误,我的处理方式就是简单地从DATA此处的现有文件夹复制权限(我正在使用SQL Express 2014来支持较旧的应用):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(注意:您的实际安装路径可能有所不同-尤其是您的实例名称不同时)

DATA首先以管理员身份双击该文件夹以确保您具有访问权限,然后打开该文件夹上的属性并模拟该文件夹的属性APP_DATA。在我的情况下,丢失的用户是MSSQL$SQLEXPRESS2014(因为我命名了实例SQLEXPRESS2014-您的实例可能有所不同)。这也恰好是SQL Server服务的用户名。


0

出于某种原因,设置所有正确的权限对我而言无济于事。我有一个db.bak由于5(Access is denied.)错误而无法还原的文件。该文件与其他几个备份文件放在同一文件夹中,所有权限其他文件相同。我能够还原除此以外的所有其他文件db.bak文件文件。我什至尝试更改SQL Server服务登录用户-仍然是相同的结果。我尝试复制文件没有任何效果。

然后我尝试通过执行来创建一个相同的文件

type db.bak > db2.bak

而不是复制文件。瞧,它奏效了!db2.bak恢复成功。

我怀疑5(Access is denied.)MS SQL 可能会错误地报告读取备份文件的其他问题。


0

在linux中,我转到/var/opt/mssql/data/文件夹并打开一个终端,sudo然后更改了我的* .mdf和* .ldf文件权限,如下所示,其中您yourDB用数据库文件名替换myUser为当前登录的用户名:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

在那之后,它重新连接没有任何问题。


0

这意味着SSMS登录用户对.mdf文件没有权限。这对我来说是这样的:

我已经打开了SSMS(以管理员身份运行)并以管理员用户身份登录,右键单击数据库的附加,单击添加,选择.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.