Active Directory:在 Java 中设置 ACE

问题描述

我正在尝试在 (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 (将#修改为@)