软件中工程用到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

sqlserver打开或创建mdf失败相关推荐

  1. sqlserver创建对于job失败_创建维护计划失败创建 对于 JobStep“子计划”失败

    创建维护计划失败. =================================== 创建 对于 JobStep"子计划"失败. (Microsoft.SqlServer.M ...

  2. 执行transact mysql_创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL

    机房收费系统完成了,但是我是在笔记本上敲得,没有实现异地发布,结局只能是被PASS掉了~回来重新导出自己的数据库到台式机上,由于我笔记本装的SQL和台式机版本是不一样的,所以遇到一些问题,具体解决方法 ...

  3. 创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL语句或批处理时发生了异常。

    创建数据库失败((Microsoft.SqlServer.Smo))执行Transact-SQL语句或批处理时发生了异常. 参考文章: (1)创建数据库失败((Microsoft.SqlServer. ...

  4. UNI-APP,plus.runtime.openURL打开手机自带浏览器,出现“下载地址不可用,创建任务失败”的Bug

    在UNI-APP中,有时候需要打开手机自带的浏览器,下载更新软件,通常使用 //#ifdef APP-PLUS plus.runtime.openURL(res.url); //#endif 但是,最 ...

  5. 【経験談】VS2013创建数据库连接失败问题

    这是第一次在VS中建立数据库连接,连蒙带猜地总结以下经验. 提取截图加编辑文本用了近一个小时,但是,相信我,看完它不过十分钟的事. 中间一些问题的原因还没有参悟透,留待以后补充.有大神路过的话,万望赐 ...

  6. 添加Sql作业,新建步骤出现:从IClassFactory为CLSID为{AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2}的COM组件创建实例失败

    从ICassFactory为CLSID为{17BCA6E8-A950-497E-B2F9-AF6AA475916F}的COM组件创建实例失败,原因是出现以下错误:c001f011.(Microsoft ...

  7. 缓存服务器syns to listen sockets drop导致创建socket失败

    问题描述: 最近遇到了一个syn丢包的情况,当系统磁盘.网络.cpu都无压力的时候,系统莫名其妙出现"sync to listen sockets drop"问题:无论带宽是10M ...

  8. C/C++注册表【2】打开,创建,删除

    注册表打开,创建,删除 所需要头文件:windows.h  常用函数 (1) 打开一个键的函数: RegOpenKeyEx 函数定义:LONG RegOpenKeyEx(HKEY hKey,      ...

  9. 用于打开和创建SQLite,Microsoft SQL Server,PostgreSQL和MySQL SQL数据库的WPF对话框

    目录 介绍 创建数据库对话框 打开数据库对话框 背景 使用代码 显示数据库对话框 加密 序列化 构建演示应用程序 遗漏 从Github下载源代码 介绍 本文介绍了一些用于创建和打开SQL数据库的便捷对 ...

最新文章

  1. 美国中央情报局CIA正通过开发人工智能项目,收集与检索社交媒体情报
  2. Nignx平滑升级(1.8.0-1.8.1)
  3. CSU 1328 近似回文词【最长回文字符串(三种方法)】
  4. qtp启动java程序_转: QTP六脉神剑之调用Java程序
  5. 中国电子学会scratch等级考试三级
  6. Python2.7.16安装(Win10)
  7. Python解决使用列表副本问题
  8. CListCtrl控件的使用指南
  9. Hbuilder x安装教程(前端html5开发)
  10. 二阶切比雪夫多项式实现(scala版、python版)
  11. Ubuntu安装Hbase数据库
  12. Android升级WebView浏览器内核版本
  13. 360发起网民隐私保卫战
  14. IDEA 依赖自动导入,不用每次手动点击Load Maven Changes图标
  15. 树莓派Linux-raspberrypi域名解析失败:Temporary failure in name resolution
  16. 调试屏幕分辨率变化html页面变化,屏幕分辨率如何自动调整网页显示问题
  17. 基于Python校园二手书籍交易系统设计与实现 开题报告
  18. 详解git push后出现src refspec dev does not match any
  19. linux下使用tar命令解压.tar.gz文件是参数的说明
  20. 地平线征程5开发平台简介

热门文章

  1. M1芯片处理器mac版Adobe全家桶系列(PR/PS/AE/LR/AU/AI/DW/BR等)安装不上失败闪退解决方案 支持M1,BIG SUR
  2. Java堆栈的创建方式和方法说明
  3. asm路径出现DB_UNKNOWN
  4. Cadence-pad designer 焊盘设计教程
  5. 51单片机8通道自动温度检测系统仿真+ Proteus仿真
  6. 支付接口如何申请?商户申请条件是什么?
  7. fms边缘服务器配置
  8. Keepalived常用配置及脚本
  9. 普通函数和箭头函数区别
  10. 高性能服务器程序框架