179

我开始学习 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

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

4

19 回答 19

147

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

看看这个

为了解决这个问题,我做了以下事情:

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

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

在此处输入图像描述

在此处输入图像描述

于 2013-08-17T08:37:04.303 回答
136

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

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

瞧!

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

于 2016-02-17T18:38:57.027 回答
56

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

于 2015-02-23T11:13:32.043 回答
51

这是与 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)
于 2014-10-09T08:25:07.717 回答
20

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

于 2017-07-05T00:55:06.697 回答
13

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

于 2013-08-17T08:48:02.810 回答
11

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

  1. 您可以直接更改 MSSQLSERVER 服务启动用户帐户,使用对文件具有更高权限的用户帐户。然后尝试附加数据库。
  2. 或者,您可以将用户分配给 mdf 和 ldf 文件属性的安全选项卡中的文件,并检查读写权限。
  3. 使用 windows 管理员帐户启动,并使用以管理员身份运行选项打开 SQL Server,并尝试使用 windows 身份验证登录,现在尝试附加数据库。
于 2015-03-13T12:12:56.573 回答
10

我通过为组和文件添加Full control权限来解决这个问题。.mdf.ldfUsers

于 2016-12-02T15:26:00.520 回答
6

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

于 2016-05-23T13:03:11.700 回答
5

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

于 2014-09-11T19:27:42.950 回答
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) 

我仍然得到权限错误,但后来我注意到在附加屏幕中,底部仍然显示 LOG 文件,并且错误消息保持不变。

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

于 2014-05-21T00:18:07.443 回答
0

非常简单的解决方案。

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

我在我的应用程序中使用了实体框架并且遇到了这个问题,我在文件夹和 Windows 服务中设置了任何权限并且不起作用,之后我以管理员身份启动我的应用程序(右键单击 exe 文件并选择“以管理员身份运行”)并且工作美好的。

于 2017-07-17T07:45:44.020 回答
0

.MDF如果您在 Visual Studio 项目的文件APP_DATA夹(或放置它的位置)中的文件上遇到此错误,我这样做的方法是简单地从DATA此处的现有文件夹复制权限(我使用 SQL Express 2014 来支持较旧的应用程序):

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

(注意:您的实际安装路径会有所不同 - 特别是如果您的实例名称不同)

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

于 2019-01-24T01:37:25.293 回答
0

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

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

type db.bak > db2.bak

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

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

于 2019-11-27T08:49:31.850 回答
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

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

于 2020-01-08T08:07:25.247 回答
0

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

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

于 2020-07-15T22:44:28.153 回答
0

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

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

之后试一试。

于 2021-05-20T19:47:11.523 回答
0
  1. 以管理员身份运行 SQL Server 管理工作室
  2. 以 Windows 用户身份登录
  3. 如果您只有 MDF 文件(没有日志文件),请删除日志文件

在此处输入图像描述

使用上述清单中的 3 项,您将消除与附加数据库任务相关的几乎所有问题。

于 2021-05-22T05:17:23.587 回答