我开始学习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
在书中,作者说它应该有效,但在我的情况下不起作用。我搜索了但我不知道究竟是什么问题,所以我发布了这个问题。
答案 0 :(得分:122)
SQL Server数据库引擎服务帐户必须具有在新文件夹中读/写的权限。
查看this
要修复,我做了以下事情:
将管理员组添加到文件安全权限中 完全控制数据文件(S :)和日志文件(T :)。
附上数据库,工作正常。
答案 1 :(得分:85)
旧帖子,但这是一步一步,适用于在Windows 7下运行的SQL Server 2014:
我认为设置登录帐户可能是安装中的一个选项,但如果是这样,那么它不是默认设置,如果您还没有意识到这个问题,很容易错过。
答案 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文件。所有这些程序都有效:
答案 6 :(得分:5)
我通过为Full control
组的.mdf
和.ldf
文件添加Users
权限来解决此问题。
答案 7 :(得分:5)
答案 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)
非常简单的解决方案。