SQLServer 操作系统错误5: “5(拒绝访问)”

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

Msg 5120,等级16,状态101,第1行无法打开物理文件 “ C: Murach SQL Server 2008数据库 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

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

538570 次浏览

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

看看 这个

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

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

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

enter image description here

enter image description here

是的,没错。首先查找 sqlserver 的服务帐户,同时按下 ctrl + alt + delete 即可在任务管理器中看到,然后必须给服务帐户“ C: Murach SQL Server 2008数据库”的读/写权限。

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

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 屏幕中,底部的部分仍然显示了日志文件,错误消息保持不变。

希望这能帮到做同样事情的人。

此时,实际的服务器权限并不重要; 一切正常。 SQLServer 本身需要文件夹权限。
根据您的版本,您可以添加 SERVERNAME $MSSQLSERVER 权限来触摸您的文件夹。否则,它必须位于默认的 BACKUP 目录(安装它的位置或默认的 c: Programfiles (x) MSSQL BACKUP 目录)中。

这是与 Windows 相关的问题,SQLServer 对包含。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)

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

问题在于 SQLServer 没有访问 mdf & ldf 文件的权限。所有这些程序都会奏效:

  1. 您可以直接更改 MSSQLSERVER 服务启动用户帐户,使用对文件具有更好权限的用户帐户。然后尝试连接数据库。
  2. 或者您可以在 mdf & ldf 文件属性的 security 选项卡中将用户分配给文件,并检查读写权限。
  3. 启动时使用 Windows 管理员帐户,打开 SQLServer 时使用 run 作为管理员选项,并尝试使用 Windows 身份验证登录,现在尝试连接数据库。

这是一篇老文章,但下面是在 Windows 7下运行的 SQLServer2014的一步一步的工作:

  • 控制面板->
  • 系统及保安->
  • 行政工具->
  • 服务->
  • 双击 SQLServer (SQLEXPRESS)-> 右键单击“属性”
  • 选择登录选项卡
  • 选择“ LocalSystemAccount”(默认为某个迟钝的 WindowsSystem 帐户)
  • - > OK
  • 右击,停止
  • 右击,开始

好了!

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

对我来说,这个问题是通过 SQLServerManagement 工作室以下方式解决的 - 以管理员身份登录(我以 Windows 身份验证身份登录) - 附加 mdf 文件(右键单击 Database | atte | Add) - 注销为管理员 - 作为普通用户登录

非常简单的解决方案。

  1. 用系统管理员登录
  2. 复制你的 mdf 和 ldf 文件在“ C: 程序文件(x86) Microsoft SQL Server MSSQL11.MSSQLSERVER MSSQL 数据”其中所有其他数据文件重置。
  3. 现在从那里连接它将工作

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

我有这个问题。只是运行作为 管理人的 SQL 服务器

我在我的应用程序中使用了实体框架,遇到了这个问题,我在文件夹和窗口服务中设置了任何权限,但是没有工作, 之后,我以管理员身份启动应用程序(右键单击 exe 文件并选择“ run as admin”) ,这样就可以了。

如果你在 Visual Studio 项目的 APP_DATA文件夹(或者任何你放它的地方)的 .MDF文件上得到这个错误,我的方法是简单地从现有的 DATA文件夹复制权限(我使用 SQL Express 2014来支持一个旧的应用程序) :

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

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

作为管理员,首先双击 DATA文件夹以确保您有访问权限,然后打开该文件夹上的属性,并对 APP_DATA文件夹模仿相同的操作。在我的例子中,缺少的用户是 MSSQL$SQLEXPRESS2014(因为我将实例命名为 SQLEXPRESS2014-您的实例可能不同)。这正好也是 SQLServer 服务的用户名。

由于某些原因,在我的情况下,设置所有正确的权限没有帮助。我有一个由于 5(Access is denied.)错误而无法恢复的文件 db.bak。该文件与其他几个备份文件放在同一个文件夹中,所有对其他文件的权限都是 一模一样。除了这个 db.bak文件,我还原了所有其他文件。我甚至试图更改 SQLServer 服务登录用户ーー结果仍然是相同的。我试过复制文件,但没有效果。

然后我尝试通过执行

type db.bak > db2.bak

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

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

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

chmod 755 yourDB.mdf
chown myUser yourDB.mdf


chmod 755 yourDB.ldf
chown myUser yourDB.ldf

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

这意味着 SSMS 登录用户对。Mdf 文件。这就是它对我的作用:

我已经打开了 SSMS (以管理员身份运行)并以管理员身份登录,数据库右键单击附加,单击添加,选择。Mdf 文件,单击 OK。成交。

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

首先你得解压文件。如果要进入 mdf/ldf 文件的属性 > > > 然后是“ Advanced”> > > 取消选中“ Compress Content to save disk space”> > 按“ Apply”。

然后再试试。

  1. 以管理员身份运行 SQLServer 管理工作室
  2. 以 Windows 用户身份登录
  3. 如果只有 MDF 文件(没有日志文件) ,请删除日志文件

enter image description here

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

我备份数据库时遇到了这个问题。

System.Data.SqlClient.SqlError:
Cannot open backup device 'C:\x\x\xxx.bak'.
Operating system error 5 (Access is denied.). (Microsoft.SqlServer.Smo)

当我有这个问题,我认为我连接到数据库的用户没有权利访问备份位置。我给了那个用户完全的控制权,但是什么都没有改变。这是因为 SQLServer 的服务与另一个用户一起运行。

enter image description here

此时,您可以选择将服务的用户更改为本地系统帐户,或者为服务的当前用户添加访问权限。

我选第二个。

enter image description here

更改后,备份成功。

如果使用 < strong > Storage Gateway-SMB (S3) 从管理工作室开始

  1. EXEC xp _ cmdshell‘ net use X: 100.155.16.6 mystoragegatewayfile xxmysuperpassxx/user: sgw-445577 smbguest/always: yes/y’EXEC xp _ cmdshell‘ net use X: 100.155.16.6 mystoragegatewayfile xxmysuperpassxx/user: sgw-445577 smbguest

  2. EXEC XP _ CMDSHELL‘ Dir X:’(这应该会显示目录信息,序列号等)

  3. 安装驱动器(此 PC-> 安装网络驱动器,使用相同的信息以上) 使用预定的备份测试运行备份作业,这将强制使用 sql 服务器代理,您可以看到它在哪里写入,以及如果有问题,会发生什么。