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

时间:2013-08-17 08:30:56

标签: sql sql-server

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

  

Msg 5120,Level 16,State 101,Line 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

在书中,作者说它应该有效,但在我的情况下不起作用。我搜索了但我不知道究竟是什么问题,所以我发布了这个问题。

18 个答案:

答案 0 :(得分:122)

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

查看this

  

要修复,我做了以下事情:

     

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

     

附上数据库,工作正常。

enter image description here

enter image description here

答案 1 :(得分:85)

旧帖子,但这是一步一步,适用于在Windows 7下运行的SQL Server 2014:

  • 控制面板 - >
  • 系统和安全 - >
  • 管理工具 - >
  • 服务 - >
  • 双击SQL Server(SQLEXPRESS) - >右键单击,属性
  • 选择登录标签
  • 选择“本地系统帐户”(默认为某些小型Windows系统帐户)
  • - >行
  • 右键单击,停止
  • 右键单击,开始
Voilá!

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

答案 2 :(得分:41)

这是与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)

答案 3 :(得分:34)

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

答案 4 :(得分:12)

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

答案 5 :(得分:9)

问题是由于缺少SQL Server访问mdf和amp;的权限。 ldf文件。所有这些程序都有效:

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

答案 6 :(得分:5)

我通过为Full control组的.mdf.ldf文件添加Users权限来解决此问题。

答案 7 :(得分:5)

我有这个问题。只需以管理员身份运行sql server

答案 8 :(得分:4)

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

答案 9 :(得分:4)

对我来说,它是通过SQL Server Management studio以下列方式解决的 - 以admin身份登录(我以windows身份验证登录) - 连接mdf文件(右键单击Database | attach | Add) - 以管理员身份登出 - 以普通用户身份登录

答案 10 :(得分: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) 

我仍然认为是权限错误,但后来我注意到在Attach屏幕中,底部STILL显示了LOG文件,错误信息保持不变。

希望这有助于做同样事情的人。

答案 11 :(得分:0)

如果您尝试附加的数据库已压缩,则可能会显示错误消息。

首先你必须解压文件。为此,请转到 mdf/ldf 文件的属性>>然后“高级”>>取消选中“压缩内容以节省磁盘空间”>>按“应用”。

然后尝试一下。

答案 12 :(得分:0)

这意味着SSMS登录用户对.mdf文件没有权限。这就是它为我工作的方式:

我已经打开了SSMS(以管理员身份运行)并以管理员用户身份登录,右键单击数据库的附加,单击添加,选择.mdf文件,单击确定。完成。

答案 13 :(得分: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

此后,它没有任何问题地重新连接。

答案 14 :(得分:0)

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

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

type db.bak > db2.bak

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

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

答案 15 :(得分:0)

如果您在Visual Studio项目的.MDF文件夹(或放置位置)的APP_DATA文件上遇到此错误,则我执行此操作的方法是简单地从此处现有的DATA文件夹(我正在使用SQL Express 2014支持较旧的应用程序):

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

(注意:您的实际安装路径可能有所不同-特别是在您的实例名称不同的情况下)

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

答案 16 :(得分:0)

我在我的应用程序中使用了Entity框架并遇到了这个问题,我在文件夹和Windows服务中找到了任何权限而没有工作, 之后我以管理员身份启动我的应用程序(右键单击exe文件并选择"以管理员身份运行")并且工作正常。

答案 17 :(得分:0)

非常简单的解决方案。

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