1

C# を使用して新しいコンピューター アカウントを作成しています。私の目標は、IT ヘルプデスク担当者がコンピューターをドメインの適切な OU に安全に追加できるようにすることです。私が意図した方法は、関連情報を取得して Active Directory にアカウントを作成するツールを使用することでした。これまでのところ、これはすべてうまく機能しています。問題は 1 つだけです。コンピューターをドメインに参加させる権利をワーカーに付与する方法がわかりません。通常、Active Directory では、新しいコンピューターをドメインに参加させることを許可されているグループを変更できます。DirectoryServices.AccountManagement を使用していますが、コードで同じことを行う方法がわかりません。

これが私のコードです:

PrincipalContext oPrincipalContext = GetPrincipalContext(sOU);

//The password is just a random construction.
//The computer SAM Account Name must end with a dollar sign in order for it
//to be usable.
ComputerPrincipal oComputerPrincipal = new ComputerPrincipal(oPrincipalContext, 
                                                             sComputerName + "$", 
                                                             RandomPassword(), 
                                                             true);

//You actually need to save the record before it is actually created
oComputerPrincipal.Save();

これにより、コンピューター アカウントが作成され、正しい OU に配置されます。ただし、コンピュータをこのアカウントに接続するには、ドメインにコンピュータを追加する権限が付与されている必要があります。そのためのコードが見つかりません。

余談ですが、ヘルプデスクの担当者にコンピュータをドメインに参加させる権限を付与できることは理解しています。ただし、問題は、このツールを使用しなくても実行できることです。彼らは、それを行うときに、コンピューターを間違った OU に送信していることに気付かないでしょう。

アップデート

これは、私がコードで達成しようとしていることを示す更新された画像です。下の画像でわかるように、コードで新しいコンピューター アカウントを作成するときに、(コードを介して) 一番下のボックスを変更しようとしています。この特定のコンピューターをドメインに追加できるユーザーを指定する方法をご覧ください。

新しいコンピュータ ダイアログ

4

2 に答える 2

0

これを行うには、コンピューター アカウントに少なくとも [パスワードのリセット] 権限を付与する必要があります。他に何も必要ないと思いますが、手に負えません。

ActiveDirectoryAccessRule クラスを使用して ACE を構築し、それを ACL に追加できます。あなたは次のようなことをしたいと思うでしょう:

var rule = new ActiveDirectoryAccessRule(<user to delegate to>, ActiveDirectoryRights.ExtendedRight, AccessControlType.Allow, new Guid("00299570-246d-11d0-a768-00aa006e0529")

于 2011-10-27T14:55:54.793 に答える
0

ここに ExtendedRightAccessRule を見つける場所があります

次に、ドメイン ユーザー「user1」が OU「ForUser1」に存在するユーザーのパスワードをリセットできるようにする簡単な例を示します。ユーザーがコンピューターを OU に追加できるようにするだけです。@Brian Desmon が GUID を提供します。

/* Connection to Active Directory 
 */ 
DirectoryEntry workingOU = new DirectoryEntry(); 
workingOU.Options.SecurityMasks = SecurityMasks.Owner | SecurityMasks.Group | SecurityMasks.Dacl | SecurityMasks.Sacl; 
workingOU.Path = "LDAP://WM2008R2ENT:389/ou=ForUser1,dc=dom,dc=fr"; 

/* Retreive Obect security 
 */ 
ActiveDirectorySecurity adsOUSec = workingOU.ObjectSecurity; 

/* Ellaborate the user to delegate 
 */ 
NTAccount ntaToDelegate = new NTAccount("dom", "user1"); 
SecurityIdentifier sidToDelegate = (SecurityIdentifier)ntaToDelegate.Translate (typeof(SecurityIdentifier)); 

/* Specils Guids 
 */ 
Guid UserForceChangePassword = new Guid("00299570-246d-11d0-a768-00aa006e0529"); 
Guid userSchemaGuid = new Guid("BF967ABA-0DE6-11D0-A285-00AA003049E2"); 
Guid pwdLastSetSchemaGuid = new Guid("bf967a0a-0de6-11d0-a285-00aa003049e2"); 

/* Ellaborate ACEs 
 */ 
ExtendedRightAccessRule erarResetPwd = new ExtendedRightAccessRule(ntaToDelegate, AccessControlType.Allow, UserForceChangePassword, ActiveDirectorySecurityInheritance.Descendents, userSchemaGuid); 
PropertyAccessRule parPwdLastSetW = new PropertyAccessRule(ntaToDelegate, AccessControlType.Allow, PropertyAccess.Write, pwdLastSetSchemaGuid, ActiveDirectorySecurityInheritance.Descendents, userSchemaGuid); 
PropertyAccessRule parPwdLastSetR = new PropertyAccessRule(ntaToDelegate, AccessControlType.Allow, PropertyAccess.Read, pwdLastSetSchemaGuid, ActiveDirectorySecurityInheritance.Descendents, userSchemaGuid); 
adsOUSec.AddAccessRule(erarResetPwd); 
adsOUSec.AddAccessRule(parPwdLastSetW); 
adsOUSec.AddAccessRule(parPwdLastSetR); 

workingOU.CommitChanges(); 

編集済み (2011-11-04)

私の理解では、あなたがやりたいことは一種の委任です。内部 Active-Directory の委任は、オブジェクトに対する権利によって実現します。あなたのケースでは、ユーザーがコンピュータ アカウントを作成できるようにしたいと考えています。ほとんどの場合、管理者はドメイン全体に対してこれを行います。

ここに画像の説明を入力ここに画像の説明を入力

試してみると、ドメイン nod ACL (アクセス制御リスト) に新しい ACE (アクセス制御エントリ) が表示されます。この例では、1 つの OU で権限を委任するだけです。


第二版 (2011-11-04)

彼は私が書いていることの証拠です:

ここに画像の説明を入力

セキュリティタブを見ると

ここに画像の説明を入力

于 2011-10-27T18:48:53.867 に答える