创建文件时遇到操作系统错误5(无法检索此错误的文本。原因:15105)。

73

我有一个来自 MS SQL EXPRESS 的数据库文件 .mdf,它保存在以下文件夹中:

C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

我想要将它连接到 MS 2008 R2 (MSSQL10_50.MSSQLSERVER),但是在使用服务器管理工具时,我收到了以下错误:

CREATE FILE 在尝试打开或创建物理文件时遇到操作系统错误5(无法检索此错误的文本。原因:15105)

你有任何解决办法吗?


2
MDF文件是否已经附加到SQL Server的实例中,或者在Visual Studio项目中打开或类似的情况?您尝试过复制该文件并进行附加吗?MDF文件来自哪里?它可能没有从原始来源干净地分离出来吗? - Aaron Bertrand
3
SQL Server 是否以管理员身份运行?请参见 CREATE FILE encountered operating system error 5 Access is denied - Andomar
1
谢谢大家的评论,我能够通过以管理员身份运行来解决这个问题! - GibboK
27个回答

143

我能够通过以管理员身份运行MS SQL Management Studio来解决问题。


3
http://stackoverflow.com/users/2029904/user2029904 的回答不那么激烈,并解决了根本问题——实例账户对数据库文件的访问权限不足。 - Pekka
@GibboK 如果数据库是使用EF:Code First创建的,我更改了我的模型,当我尝试运行程序时出现了这个错误。我以管理员身份运行VS,但什么也没有改变。 - AminM
修复“实例帐户对数据库文件访问不足”的方法对我无效,只有以管理员身份运行才有效。为什么微软的程序员不解决这个问题并使我们所有人免受这种不必要的痛苦? - tbone

52

这是一个Windows权限问题。如果您使用Windows认证连接到服务器,则该Windows用户需要对文件具有权限。如果您使用SQL Server身份验证连接到服务器,则SQL Server实例帐户(例如MSSQL$,MSSQL$SQLEXPRESS)需要对文件具有权限。其他解决方案建议以管理员身份登录,本质上也可以实现相同的功能(有点像用大锤敲打:)。

如果数据库文件位于SQL Server的数据文件夹中,则应该从该文件夹继承了SQL Server帐户的用户权限,因此SQL Server身份验证应该能够工作。我建议修复SQL Server实例帐户在该文件夹中的权限。如果数据文件在其他地方且SQL Server帐户没有权限,则您很可能会在稍后遇到其他问题。再次强调,更好的解决方案是修复SS帐户权限。除非您总是以管理员身份登录...


这是我的解决方案。谢谢! - JeffryHouser
5
编辑数据文件夹的安全属性,以便赋予运行SQL Management Studio的用户完全控制权限。 - Suncat2000
实例账户尝试使用Write DAC权限打开数据和日志文件。如果<Machine>\Users帐户对文件具有完全权限,则可以使用此权限。当测试连接成功时,这些权限将被覆盖为特定的SQL Server值,擦除临时设置。 - Pekka
我真的很想使用这个选项,而不是以管理员身份运行SQL Server Management Studio。我已经将两个可能的用户分配为我的目录/文件的完全控制权,但我仍然收到相同的错误。我如何知道哪个是正确的用户来授权这些文件? - Giles Roberts
4
以管理员身份运行对我无效。检查服务中的SQL Server时,它是在Network Service账户下运行的。我给了该文件夹Network Service权限,创建数据库成功 :) - Atta H.
1
这个答案指引我找到了解决方案:确保 SQL Server 服务正在运行的身份(例如,“NT Service\MSSQLSERVER”)可以访问 DATA 文件夹。 - Alejandro Moreno

8

开始->运行->services.msc->浏览服务列表,直到找到 SQL Server->右键点击->属性->登录标签:

然后选择 本地系统账户 并选中 允许服务与桌面交互 复选框。

重新启动服务。

Services


4

右键单击mdf和ldf文件,选择属性->安全->完全控制权限


4
给予管理员权限或完全控制数据库安装位置解决了我的问题。

3

我曾经遇到过同样的问题。尝试了几次之后,我发现使用Windows身份验证连接SQL Server可以解决这个问题。


这对我解决了问题。以管理员身份运行SQL Server Management Studio并没有解决我的问题。 - Guru Josh
与我相反,我使用SQL Server身份验证登录了“sa”帐户,并且它可以正常工作。 - d.i.joe

2
我也曾遇到类似的错误。
CREATE FILE encountered operating system error **32**(failed to retrieve text for this error. Reason: 15105) while attempting to open or create the physical file

我使用了以下命令来附加数据库:
EXEC sp_attach_single_file_db @dbname = 'SPDB',
@physname = 'D:\SPDB.mdf'

1

1.将--.MDF、--.LDF文件复制到pate此位置 对于2008服务器: C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA 2.在SQL Server 2008中使用ATTACH并选择相同的位置进行添加。


1

正如其他人建议的那样,以管理员身份运行可以有所帮助。

然而,这仅适用于 Windows 用户实际上是 SQL Server 运行的机器上的管理员。

例如,在从远程计算机使用 SSMS 时,如果用户只是运行 SSMS 的计算机上的管理员而不是运行 SQL Server 的计算机上的管理员,则使用“以管理员身份运行”将无法帮助。


1
我在Windows 2003上使用SQL 2005时遇到了这个问题。我必须以我的Windows用户帐户拥有文件的所有权,然后以此方式附加数据库。
您需要右键单击文件,选择属性,点击“确定”以跳过信息屏幕,点击“高级”按钮,在可用帐户或组列表中选择您的帐户,应用更改,并在属性屏幕上单击“确定”。完成所有操作后,您将能够管理文件权限。
我使用Windows身份验证登录SSMS,并且能够成功附加数据库。
干杯!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接