我在c#中使用下面的脚本来确定sqlserver服务帐户是否对目录有权限。
public static bool userhasaccess(string username, string path)
{
DirectorySecurity dSecurity = Directory.GetAccessControl(path);
bool control_allowed = false;
bool control_denied = false;
foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount)))
{
if (rule.IdentityReference.Value.ToLower() == username.ToLower())
{
if (rule.FileSystemRights == FileSystemRights.Read
|| rule.FileSystemRights == FileSystemRights.FullControl
|| rule.FileSystemRights == FileSystemRights.ReadAndExecute
|| rule.FileSystemRights == FileSystemRights.ReadData
)
{
if (rule.AccessControlType == AccessControlType.Allow)
control_allowed = true;
if (rule.AccessControlType == AccessControlType.Deny)
control_denied = true;
}
}
}
return (control_denied ? false : control_allowed);
}
这并不完美,因为它可能会忽略群组,但我已经使用我的具体示例逐步完成了代码,并且我的文件夹没有拒绝权限。 (\\服务器\目录)。
然后我执行一个SqlCommand restore HEADERONLY from disk = N'\\server\directory\file.bak'
,它应该为这个目录中的文件提供恢复头。
这给了我以下错误:
Cannot open backup device '\\server\directory\file.bak'. Operating system error 5(Access is denied.).
RESTORE HEADERONLY is terminating abnormally.
根据GetAccessRules,此帐户在此目录中具有FullControl,为什么会发生这种情况?