授予特定本地 Windows 用户组对文件夹及其子文件夹的读取权限
Posted
技术标签:
【中文标题】授予特定本地 Windows 用户组对文件夹及其子文件夹的读取权限【英文标题】:Give specific local Windows user group read access to a folder and its subfolders 【发布时间】:2018-06-12 23:52:51 【问题描述】:我想以编程方式授予本地用户组 <MachineName>\IIS_IUSRS
访问文件夹及其子文件夹的权限。
我当前的代码如下所示:
DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
var groupName = Environment.MachineName + @"\IIS_IUSRS";
directorySecurity.AddAccessRule(
new FileSystemAccessRule(groupName,
FileSystemRights.Read,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow));
directoryInfo.SetAccessControl(directorySecurity);
但这是在抛出System.Security.Principal.IdentityNotMappedException
。将groupName
替换为new SecurityIdentifier(WellKnownSidType.WorldSid, null);
的SID 可以正常工作。
我是否需要为群组获取SecurityIdenfier
,如果需要,我该怎么做?还是我需要为团体做完全不同的事情?
编辑:BUILTIN\IIS_IUSRS
也不起作用,因为我使用的是带有德语区域设置的 Windows。
【问题讨论】:
C# code to automatically give IIS write access to a folder on Windows Server 2008? Currently throws exception的可能重复 @AlexK。我发现了这个问题,实际上我得到了通用代码(DirectorySecurity.....
等),但它在我的机器上不起作用(Windows 10 版本 1709)。异常仍然告诉我无法翻译用户。
链接代码使用 BUILTIN 而不是 MACHINENAME 来识别该内置组,BUILTIN\IIS_IUSRS 是否也不起作用?
@AlexK。正确。
【参考方案1】:
你不需要使用 SID,我曾经写过一个工作程序,它使用了“DOMAIN\GroupName”,它运行良好。而不是:
var groupName = Environment.MachineName + @"\IIS_IUSRS";
试试:
var groupName = @".\IIS_IUSRS";
【讨论】:
做到了。另一个问题中建议的BUILTIN\IIS_IUSRS
不起作用。 .\IIS_IUSRS
对我来说是 Windows 10 的正确方式。
谢谢。它也适用于我的 Windows Server 2016。以上是关于授予特定本地 Windows 用户组对文件夹及其子文件夹的读取权限的主要内容,如果未能解决你的问题,请参考以下文章
用java 编写一个程序,在命令行中以树状结构展现特定的文件夹及其子文件(夹)!