0

Windows7でADLDSを使用しており、adaminstallユーティリティを使用して新しいアプリケーションパーティションでローカルインスタンスを作成しました。

このパーティションのReadersロールに既存のローカルWindowsグループを追加するにはどうすればよいですか?

次の手動手順で得られるのと同じ結果をプログラムで(C#で)達成したいと思います。

  1. ADSI Editを開始し、ADLDSインスタンスとパーティションに接続します。
  2. パーティションルートノードの下のCN=Readersに移動します。
  3. CN=Readersエントリをダブルクリックします。
  4. 「メンバー」属性をダブルクリックします。
  5. 既存のローカルWindowsグループを選択して追加します。

私はすでに次のC#コードを持っています:

public void AddReader(string partitionName, string accountName)
{
  var ntAccount = new NTAccount(accountName);
  var securityIdentifer = ntAccount.Translate(typeof(SecurityIdentifier));
  var accountNameDN = string.Format("CN={0},CN=ForeignSecurityPrincipals,{1}", securityIdentifer.Value, partitionName);

  var rootPath = string.Format("LDAP://localhost:389/CN=Readers,CN=Roles,{0}", partitionName)
  var directoryEntry = new DirectoryEntry(RootPath);
  directoryEntry.Properties["member"].Add(accountNameDN);
  directoryEntry.CommitChanges();
}

このコードは、ローカルグループが上記の手動手順を使用してReadersロールに少なくとも1回追加されている場合にのみ機能します。グループを手動で追加してから手動で削除すると、上記のコードを使用してグループを再度追加できます。

しかし、新しいローカルWindowsグループを追加しようとすると、CommitChanges()上記のコードを呼び出すと、DirectoryServicesCOMExceptionエラーコード0x8007002Fとメッセージが表示されますA constraint violation occurred

明らかに、手動の手順では、既存のローカルWindowsグループにいくつかの変更を加えて、ADLDSリーダーの役割に追加するのに適したものにします。しかし、私は何が欠けていますか?

ActiveDirectorySecurityとクラスを使用する私のアプローチよりも良い方法があるはずだと思いますが、ActiveDirectoryAccessRuleそれらの使用方法を理解することはできません。

4

2 に答える 2

1

私の推測では、SIDを少なくともいくつかの役割に追加するまで、そのプリンシパルのFSPは存在しないため、SIDによる参照は失敗します。

SIDによってプリンシパルをグループに追加しようとしましたか?リーダーグループへのプリンシパルの追加はどのように行われていますか?これが内部ツールによってどのように行われているのかを知りたい場合は、使用しているツールとLDSインスタンスの間のLDAP呼び出しのネットワークスニフを取得して、リーダーグループに追加してください...

于 2012-09-17T05:29:59.693 に答える
0

FSP(Foreign Security Principal)に関するEricのヒントのおかげで、私たち(Googleと私)はここで解決策を見つけました:http://www.pcreview.co.uk/forums/add-group-members-trusted-domain-programmatically-t1460084 .html(Joe Kaplansの回答までスクロールダウン)。

<SID=xxx>秘訣は、accountNameDN変数の構文を使用することです。accountNameDN変数が次のように変更された場合、元の質問のコードサンプルは機能します。

var accountNameDN = string.Format("<SID={0}>", securityIdentifer.Value);

これにより、必要なFSPが暗黙的に追加されます。

于 2012-09-17T09:31:02.347 に答える