将 mdf 文件导入 SQL Server 失败提示拒绝访问的错误处理

将备份在移动硬盘的 mdf 数据库文件导入到 SQL Server 时失败并提示拒绝访问:

1
2
3
4
消息 5120,级别 16,状态 101,第 1 行
无法打开物理文件“D:\test.mdf”。操作系统错误 5:“5(拒绝访问。)”。
消息 1802,级别 16,状态 7,第 1 行
CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。

感觉是文件权限的问题。用 Get-Acl 看一下权限信息

1
get-acl D:\test.mdf | format-list
1
2
3
4
5
6
7
8
9
Path   : Microsoft.PowerShell.Core\FileSystem::D:\test.mdf
Owner : MYMACHINE\MYUSERNAME
Group : MYMACHINE\MYUSERNAME
Access : BUILTIN\Administrators Allow FullControl
NT AUTHORITY\SYSTEM Allow FullControl
NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
BUILTIN\Users Allow ReadAndExecute, Synchronize
Audit :
Sddl :

应该是没有对这个文件赋权导致的。可以先手动对一个 mdf 文件添加当前用户的权限,

然后用 Set-Acl 将这个文件的权限应用到所有待赋权的文件:

1
2
$ownerACL = Get-Acl -Path "D:\test.mdf"
Get-ChildItem -Path D:\ -Recurse -Include "*.?df" | Set-Acl -AclObject $ownerACL

再次导入数据库导入成功。问题解决。