sqlserver打开或创建mdf失败

软件中工程用到sqlserver数据库存放数据,习惯性将数据放在桌面,但无法使用SQL Server Management Studio将数据库附加进来。与此相同的问题还有如下几种情形:

问题现象1

Msg 5133, Level 16, State 1, Line 1

Directory lookup for the file

"C:\Users\SQLTwins\Documents\AdventureWorks2014\AdventureWorks2014_Data.mdf"

failed with the operating system error 5(Access is denied.).

参考:https://nakulvachhrajani.com/2017/04/10/0405-sql-server-msg-5133-backuprestore-errors-directory-lookup-for-file-failed-operating-system-error-5access-is-denied/

 

问题现象2SQL Server Management Studio附加桌面路径数据库找不到所在文件夹

问题现象3在桌面无法使用代码或者工具创建数据库文件

问题现象4打开从其他地方拷贝的数据库文件,提示权限不够(非管理员权限)

本质:文件所在路径的ACL权限不够。修改ACL权限方法如下:

解决办法:

方法一:修改目录权限

在【编辑】里增加【添加】everyone,确认,然后勾选【完全控制】、【修改】点击【应用】即可。

注:此处添加everyone用户组是为了简单,用户也可以添加需要创建或修改数据库文件的账户。

方法二:使用cacls或者icacls修改目录权限

新建bat脚本,放入当前目录执行即可

@echo off

icacls "%cd%" /grant Everyone:(OI)(CI)F /T

pause

或者

@echo off

cacls "%cd%"  /t /e /g everyone:f

pause

方法三:使用模拟启动cmd方式(dotnet环境下可以使用)

 private static void ModifyProjectACL(string directory)

 {

            using (var myPro = new Process())

            {

                myPro.StartInfo.FileName = @"cmd.exe";

                myPro.StartInfo.UseShellExecute = false;

                myPro.StartInfo.RedirectStandardInput = true;

                myPro.StartInfo.RedirectStandardOutput = true;

                myPro.StartInfo.RedirectStandardError = true;

                myPro.StartInfo.CreateNoWindow = true;

               myPro.Start();

                myPro.StandardInput.WriteLine(directory.Substring(0, 2));

                myPro.StandardInput.WriteLine(@"cd " + directory);

                myPro.StandardInput.WriteLine(@"icacls " + "\"" + "%cd%" + "\"" + " /grant Everyone:(OI)(CI)F /T");

                myPro.StandardInput.AutoFlush = true;

            }

}

 

方法四:dotnet环境下

// Adds an ACL entry on the specified directory for the specified account.

public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)

        {

            // Create a new DirectoryInfo object.

            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the

            // current security settings.

            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings.

            dSecurity.AddAccessRule(new FileSystemAccessRule(Account,  Rights,ControlType));

            // Set the new access settings.

            dInfo.SetAccessControl(dSecurity);

           // Set the sub directory's ACL

            foreach (var ditem in dInfo.GetDirectories())

            {

                AddDirectorySecurity(ditem.FullName, Account, Rights, ControlType);

            }

        }

调用:

AddDirectorySecurity(path,"Everyone",FileSystemRights.FullControl, AccessControlType.Allow);

参考:

[1] https://nakulvachhrajani.com/2017/04/10/0405-sql-server-msg-5133-backuprestore-errors-directory-lookup-for-file-failed-operating-system-error-5access-is-denied/

[2] https://docs.microsoft.com/zh-cn/dotnet/api/system.security.accesscontrol.directorysecurity?redirectedfrom=MSDN&view=netframework-4.8

[3] https://www.cnblogs.com/junior/archive/2012/03/31/2426355.html

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要打开 SQL Server 中的 MDF 文件,可以按照以下步骤操作: 1. 打开 SQL Server Management Studio。 2. 在 Object Explorer 中,右键单击“数据库”文件夹,然后选择“附加”。 3. 在“附加数据库”对话框中,单击“添加”按钮,浏览到 MDF 文件所在的位置。 4. 选择 MDF 文件,然后单击“确定”按钮。 5. 在“附加数据库”对话框中,单击“确定”按钮,以将 MDF 文件附加到 SQL Server 中。 6. 现在,您可以在 Object Explorer 中看到已附加的数据库,并开始使用它。 请注意,如果 MDF 文件已经附加到 SQL Server 中,您可以直接在 Object Explorer 中打开它,而不需要再次附加它。 ### 回答2: 使用 Microsoft SQL Server Management Studio 打开 MDF 文件 步骤1:安装 SQL Server Management Studio (SSMS) 要使用 SSMS 打开 MDF 文件,必须首先安装 SQL Server Management Studio。SSMS 是一个免费的工具,可以从 Microsoft 官方网站上下载。根据你的操作系统,选择适当的版本,然后下载并安装即可。 步骤2:打开 SQL Server Management Studio (SSMS) 完成安装后,打开 SQL Server Management Studio。输入您的数据库服务器名称、身份验证方式和具有适当权限的帐户名称和密码,选择“连接”,从而启动 SSMS。 步骤3:将 MDF 文件连接到 SQL Server Management Studio 在 SSMS 中,选择“文件”>“打开”>“文件”。选择 MDF 文件所在的文件夹。要筛选文件类型以仅显示 MDF 文件,可从“文件类型”下拉框中选择“MDF 文件(*.mdf)”选项。选中需要打开MDF 文件,然后单击“打开”。 步骤4:附加 MDF 文件 将 MDF 文件打开后,下一步是将它附加到 SQL Server Management Studio 中。在窗口的左侧导航栏中找到并展开“数据库”节点。右键单击“数据库”节点上的空白处,然后选择“附加”。 步骤5:确定数据库文件 在“附加”对话框中,单击“添加”按钮,以选择附加 MDF 文件的文件夹。选中 MDF 文件,然后单击“确定”按钮。 步骤6:选择 MDF 文件 回到“附加”对话框中,显示 MDF 文件的完整路径,例如“C:\文件\数据.mdf”。确保数据库文件夹路径和数据文件夹路径正确,然后单击“确定”。 步骤7:等待 MDF 文件附加完成 完成后,将显示一个消息,带有警告的突出显示。请确保阅读这个消息,以确保附加过程没有出现问题。单击“确定”,等待附加完成。 步骤8:打开 MDF 数据库 现在,可以在“对象资源管理器”中看到打开的数据库。单击“+”号展开它,显示其包含的表、视图、存储过程等。 即可通过如上步骤,附加打开 MDF 文件。 ### 回答3: SQL Server是一个关系型数据库管理系统,MDF文件是SQL Server的主要数据文件,存储数据库的大部分数据和元数据。如果您需要访问或备份数据库,您需要打开MDF文件。在这里,我将介绍如何打开MDF文件。 1. 使用SQL Server Management Studio (SSMS) 打开MDF文件 SQL Server Management Studio是一个管理SQL Server的强大工具,也可以用来打开MDF文件。以下是在SSMS中打开MDF文件的步骤: 步骤1:打开SQL Server Management Studio。 步骤2:在连接到SQL Server时,在“对象资源管理器”中展开 “数据库”,右键单击需要打开的数据库,并选择“附加”。 步骤3:在“附加数据库”对话框中,选择“添加”按钮,然后浏览到MDF文件的位置,选择它,确保在“数据文件类型”下拉列表中选择“主数据文件(.MDF)”。 步骤4:点击“OK”按钮,即可打开MDF文件。 2. 使用Transact-SQL(T-SQL)命令打开MDF文件 您可以使用T-SQL命令直接打开MDF文件,以下是步骤: 步骤1:启动SQL Server Management Studio。 步骤2: 使用SQL语句命令打开MDF文件: USE [master] GO ALTER DATABASE [DatabaseName] SET OFFLINE WITH ROLLBACK IMMEDIATE GO 步骤3:执行以下语句以转到MDF文件的目录: exec sp_attach_single_file_db @dbname='DatabaseName', @physname=N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\DatabaseName.mdf' GO 步骤4:使用以下命令在线启动数据库: ALTER DATABASE [DatabaseName] SET ONLINE 3. 使用第三方工具打开MDF文件 除了使用SQL Server Management Studio和T-SQL命令之外,还可以使用一些第三方工具来打开MDF文件,包括SQL Viewer、Kernel SQL Database Recovery、DataNumen SQL Recovery等。 总的来说,您可以使用上述三种方法之一来打开MDF文件,并访问SQL Server数据库中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值