问题描述
我正在尝试在 (Microsoft) Active Directory 中设置目录对象的 ACE。我仅限于Java。因此我使用 javax.naming
和/或 Spring LDAP。
我正在尝试实现类似这里的东西(在 VB 中):https://docs.microsoft.com/en-us/windows/win32/ad/example-code-for-setting-an-ace-on-a-directory-object
我可以找到一个名为 nTSecurityDescriptor
的绑定。但我不知道该怎么办?如何修改此描述符的 discretionaryAcl
?
DirContext schema = ctx.getSchema("cn=...,OU=groups,OU=company,DC=com");
NamingEnumeration<Binding> bindingNamingEnumeration = schema.listBindings("AttributeDeFinition");
while (bindingNamingEnumeration.hasMore()) {
Binding next = bindingNamingEnumeration.next();
if (next.getName().contains("nTSecurityDescriptor")) {
System.out.println(next.getName());
}
}
我还有一个 powershell 脚本,可以达到预期的结果。但在我的上下文中,我必须使用 Java。
$guidWriteMembers = "bf9679c0-0de6-11d0-a285-00aa003049e2"
$groupEntry = $null
$dn = $(Get-ADGroup -filter { name -eq $groupCn }).distinguishedname
$groupEntry = [ADSI]"LDAP://$dn"
$sid = $groupEntry.psbase.ObjectSecurity
$ace = New-Object DirectoryServices.ActiveDirectoryAccessRule(
(New-Object Security.Principal.NTAccount($TargetAccount)),[DirectoryServices.ActiveDirectoryRights]"ReadProperty,WriteProperty",[Security.AccessControl.AccessControlType]::Allow,(New-Object System.Guid($guidWriteMembers)))
$sid.AddAccessRule($ace)
$groupEntry.psbase.ObjectSecurity = $sid
$groupEntry.psbase.CommitChanges()
$groupEntry.psbase.dispose()
在java中有没有可能做到这一点?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)