Java を使用してリモート サーバーにアクセスしています。サーバーは Microsoft Windows を実行し、Active Directory とファイル システム共有を提供します。JNDI を介して Active Directory からユーザーとグループを読み取りましたが、これはうまく機能しています。distinguishedName
などのすべてのユーザー属性を取得しますobjectSid
。
私の Java プログラムは、Java 7 と NIO.2 を使用して、同じサーバー上の Windows 共有にも接続します。リモートファイルシステムを読み取って、それに関する情報を取得できます。次のようなファイル許可設定を読み取ることもできます。
import java.nio.file.Files;
import java.nio.file.attribute.AclEntry;
import java.nio.file.attribute.AclFileAttributeView;
import java.nio.file.attribute.UserPrincipal;
[...]
AclFileAttributeView aclView = Files.getFileAttributeView(path, AclFileAttributeView.class);
for (AclEntry aclEntry : aclView.getAcl()) {
UserPrincipal principal = aclEntry.principal();
[...]
}
このようにして、オブジェクトのアクセス権を取得しUserPrincipal
ます。このクラスは、getName()
何らかの名前または場合によっては SID を返すメソッドのみを提供します。
実際のユーザーの場合、UserPrincipal
オブジェクトは、Active Directory で対応するユーザーを見つけるために使用できる SID を返します。ただし、UserPrincipal
がグループを表す場合はgetName()
、たとえば のようなテキストを返すだけです"VORDEFINIERT\Administratoren"
。
このテキストを Active Directory で定義されたグループにマップする方法が見つかりませんでした。AD の対応するグループには、次のdistinguishedName
プロパティがありますCN=Administratoren,CN=Builtin,DC=mydomain,DC=com
。
Java プログラムが実行されるマシンとサーバーの両方で、ドイツ語版の Windows が実行されています。AD がCN=Builtin
(英語) を返すのに、ファイル システムがグループ名をドイツ語に翻訳して返すのは奇妙ですVORDEFINIERT
。たとえば、両方の場合、Builtin
おそらく を解析して、AD オブジェクトの がどうあるべきUserPrincipal
かを見つけることができdistinguishedName
ます...ただし、このアプローチはあまり信頼できないようです。
UserPrincipal
AD で対応するユーザーまたはグループを見つけることができるように、すべてのオブジェクトの SID を読み取れるようにしたいと考えています。
これを行う方法はありますか?さらに情報が必要な場合はお知らせください。
よろしく、空