Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Visual Basic ve ADsSecurity.dll ACE'ler, içinde bir ACL doğru sıralamak için nasıl kullanılır

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:269159
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.
Özet
Bu makalede, ADsSecurity.dll dosya, Active Directory nesne veya kayıt defteri anahtarının güvenlik tanımlayıcısını (SD) edinmek için nasıl kullanılacağı gösterilmektedir. Bu makaleyi gösterir nasıl bir SD, o SD isteğe bağlı erişim denetim listesi (ACL) almak ve sonra uygun konumda erişim denetim girdisi (ACE) alındıktan sonra. Makaleyi ile birlikte nasıl düzgün bir ACL sipariş sonra ACL yazmak için SD. gösteren bir Microsoft Visual Basic kod örneği, basit bir algoritma sağlar.
Daha fazla bilgi
IADsAccessControlList::AddAce yöntemi ACE ACL'YE üstünde ekler. Bazı durumlarda, bir ACE en üstüne ekleyerek, istenmeyen güvenlik erişim oluşturur. Microsoft Windows XP ve Microsoft Windows Server 2003 üzerinde Active Directory Hizmet Arabirimleri (ADSI) özellik önbelleğinde geri nesneye yazmadan önce DACL doğru sipariş. Yeniden sıralama, yalnızca Microsoft Windows 2000'de gereklidir. ACE'leri bulunan bir ACL uygun sırası aşağıdaki gibidir:
Erişim engellendi ACE'ler, nesnenin kendisine uygulanır.
Erişim engellendi ACE'ler, alt nesnenin bir özellik kümesi ya da özellik uygulamak için
Erişim izni ACE'ler, nesnenin kendisine uygulanır.
Erişim izni ACE'ler, alt nesnenin bir özellik kümesi ya da özellik uygulamak için
Bu makalede listelenen ürünlerde düzgün bir ACL orders bir yöntem IADsAccessControlList arabirimini desteklemiyor. ACE'ler, bu beş gruplar halinde sıralanması gerekir:
Nesneye erişim engellendi
Bir alt ya da özellik erişimi reddedildi
Nesneye erişim izni
Erişim izni-alt veya özelliği
Tüm ACE'ler devralınan
Devralınmış ACE'ler için sipariş değiştirilmesi değil. Tüm devralınan ACE'leri işletim sistemi tarafından eklenen ve uygun şekilde sıralanır. Bir ACE devralınmış ve Windows 2000 veya Windows NT için alt nesneler ACE'NIN yayılıyor karşılamaya, BIR programcının belirtebilirsiniz.

Yayma kuralları için bir özel durum söz konusudur. Bir nesnenin ACL'YE eklenen hücreye, aslardan otomatik olarak varolan nesnelere ağacında uygulanan değil. Konsol ağacında yürütmek ve varolan nesnelere ACE ekleyerek ACE yaymak için Programcı sorumluluğundadır. ACE, yeni nesnelerin alt ağaçtaki aktarılacaktır.

ACE'leri bulunan bir ACL sıralama algoritması

  1. Isteğe bağlı ACL (DACL) güvenlik tanımlayıcısından edinin.
  2. ACE ise görmek için bu IADsAccessControlEntry::AceFlags (bit ADS_ACEFLAG_INHERITED_ACE denetle) devralınan denetleyin.
  3. IADsAccessControlEntry::AceType, ne tür erişim ACE verir ve hangi (nesnenin kendisi veya nesnenin özelliklerini için) erişim verilir görmek için denetleyin. Aşağıdaki listede, ACE'NIN türü değerleri ve bunların anlamları açıklanmıştır:
    ADS_ACETYPE_ACCESS_ALLOWED - tüm nesneyi izin verilen erişim verir...
    Erişim, özellik veya özellik kümesi için izin verilen ADS_ACETYPE_ACCESS_ALLOWED_OBJECT - gösterir.
    ADS_ACETYPE_ACCESS_DENIED - tüm nesnelere erişim vermez.
    ADS_ACETYPE_ACCESS_DENIED_OBJECT - özelliği veya özellik kümesine erişim vermez.
  4. ACE IADsAccessControlListEntry::AceType değerine dayanarak uygun geçici DACL yerleştirin.
  5. ACL'DEN ayrı ACL'leri aşağıdaki sırayla yeniden oluşturun:
    ADS_ACETYPE_ACCESS_DENIED ACE türleri
    ADS_ACETYPE_ACCESS_DENIED_OBJECT ACE türleri
    ADS_ACETYPE_ACCESS_ALLOWED ACE türleri
    ADS_ACETYPE_ACCESS_ALLOWED_OBJECT ACE türleri
    Hücreye, aslardan ADS_ACEFLAG_INHERITED_ACE bayrağıyla IADsAccessControlListEntry::AceFlags ayarlayın.
  6. Yeni ACL aynı düzeltme düzeyinde eski ACL olarak ayarlayın.
  7. Güvenlik tanımlayıcısı ACL'SINI değiştirir.

Bu makalede sağlanan Visual Basic kodu kullanma adımları

  1. ADsSecurity.dll kaydedin.

    ADsSecurity.dll Active Directory Hizmet Arabirimleri (ADSI) 2.5 Kaynak Seti bir parçasıdır. ADSI 2.5 Kaynak Seti'ni karşıdan yüklemek için aşağıdaki Microsoft Web sitesini ziyaret edin: Regsvr32 ADsSecurity.dll kaydetmek için kullanın. Bu DLL'NIN doğru kaydetmez, bu davranış, ADSI yüklü olmadığını gösterir. Kod, bir Microsoft Windows NT tabanlı bir bilgisayarda veya Microsoft Windows 98 tabanlı bir bilgisayarda çalıştırıyorsanız, uygun Active Directory istemci uzantısını yükleyin. Bu istemciler'ü edinme hakkında daha fazla bilgi için "Başvurular" bölümüne bakın.
  2. Visual Basic başlatın. Ardından, standart bir EXE projesi oluşturun.
  3. Proje için başvuruları görüntüleyin. Izleme seçili olmasına dikkat edin:
    • Etkin DS tür kitaplığı
    • ADsSecurity 2.5 tür kitaplığı
  4. Komut düğmesinin formda olun.
  5. Komut düğmesini çift tıklatın. Ardından, Command1_Click komut işleyicisinde aşağıdaki kodu yapıştırın.

Visual Basic örnek kodu sıralama algoritmasını nasıl gösterir.

Dim sec As New ADsSecurityDim sd As IADsSecurityDescriptorDim dacl As IADsAccessControlListDim ace As IADsAccessControlEntryDim newAce As New AccessControlEntry'' Declare temporary ACLs for sorting the original' ACL'Dim newdacl As New AccessControlListDim ImpDenyDacl As New AccessControlListDim ImpDenyObjectDacl As New AccessControlListDim InheritedDacl As New AccessControlListDim ImpAllowDacl As New AccessControlListDim impAllowObjectDacl As New AccessControlListPrivate Sub Command1_Click()'' Be sure to register ADsSecurity.Dll using RegSvr32 and' adding the ADsSecurity2.5 Type Library to you references for' the project.'' Using the ADsSecurity object, retrieve a SD for an object.  Just' Replace the LDAP:// path with the path of an object that contains a' SD.  For additional details on valid path strings, review' the information stored in the Platform SDK ADSI samples starting with' "<Platform SDK Root>\Samples\NetDs\ADSI\rtk.htm"'Set sec = CreateObject("ADsSecurity")<BR/>' TODO :  replace the servername and DN of the object you want to modify.Set sd = sec.GetSecurityDescriptor("LDAP://MyDCname/cn=MyUser,cn=Users,dc=MyDom,dc=com")'Displaying the ACE in the DACL --- it's the same way you display ACEs for File, File Share, Registry, Exchange, and Active Directory's ACL.Set dacl = sd.DiscretionaryAclDebug.Print Date & Time & "Initial Values of DACL"For Each ace In dacl   Debug.Print ace.Trustee   Debug.Print Hex(ace.AccessMask)   Debug.Print Hex(ace.AceType)   Debug.Print Hex(ace.AceFlags)   Debug.Print Hex(ace.Flags)NextDebug.Print dacl.AceCount'' Initialize all of the new ACLs'' If you are doing this in VBSscript you will need to use' The following methods of creating the ACL bins instead of' using the Dim As New statements above. ''Set newAce = CreateObject("AccessControlEntry")'Set newdacl = CreateObject("AccessControlList")'Set InheritedDacl = CreateObject("AccessControlList")'Set ImpAllowDacl = CreateObject("AccessControlList")'Set InhAllowDacl = CreateObject("AccessControlList")'Set ImpDenyObjectDacl = CreateObject("AccessControlList")'Set ImpAllowObjectDacl = CreateObject("AccessControlList")''' Create a new ace, this one' sets an extended right on the user object that allows the' trustee to read and write the userAccountControl property of an' user object.'' TODO : Replace the trustee with an appropriate trustee on the domain' in question.'newAce.Trustee = "MyDomain\Myuser"newAce.Flags = ADS_FLAG_OBJECT_TYPE_PRESENTnewAce.ObjectType = "{BF967A68-0DE6-11D0-A285-00AA003049E2}"newAce.AccessMask = ADS_RIGHT_DS_READ_PROP Or ADS_RIGHT_DS_WRITE_PROPnewAce.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECTnewAce.AceFlags = ADS_ACEFLAG_INHERIT_ACE'' Place the new ace in the DACL'dacl.AddAce newAce'' Sift the DACL into 5 bins:' Inherited Aces' Implicit Deny Aces' Implicit Deny Object Aces' Implicit Allow Aces' Implicit Allow object aces'For Each ace In dacl  '  ' Sort the original ACEs into their appropriate  ' ACLs  '  Debug.Print ace.Trustee  If ((ace.AceFlags And ADS_ACEFLAG_INHERITED_ACE) = ADS_ACEFLAG_INHERITED_ACE) Then     '     ' Do not really care about the order of inherited aces. Since we are     ' adding them to the top of a new list, when they are added back     ' to the Dacl for the object, they will be in the same order as     ' they were originally. Just a positive side effect of adding items     ' of a LIFO (Last In First Out) type list.     '     InheritedDacl.AddAce ace  Else     '     ' We have an Implicit ACE, let's put it the proper pool     '     Select Case ace.AceType     Case ADS_ACETYPE_ACCESS_ALLOWED        '        ' We have an implicit allow ace        '        ImpAllowDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_DENIED        '        ' We have an implicit Deny ACE        '        ImpDenyDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_ALLOWED_OBJECT        '        ' We have an object allowed ace        ' Does it apply to a property? or an Object?        '        impAllowObjectDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_DENIED_OBJECT        '        ' We have an object Deny ace        '        ImpDenyObjectDacl.AddAce ace     Case Else        '        ' Missed a bin?        '        Debug.Print "Bad ace...." & Hex(ace.AceType)     End Select  End IfNext'' Combine the ACEs in the proper order' Implicit Deny' Implicit Deny Object' Implicit Allow' Implicit Allow Object' Inherited aces'' Implicit Deny'For Each ace In ImpDenyDacl  newdacl.AddAce aceNext'' Implicit Deny Object'For Each ace In ImpDenyObjectDacl  newdacl.AddAce aceNext'' Implicit Allow'For Each ace In ImpAllowDacl  newdacl.AddAce aceNext'' Implicit Allow Object'For Each ace In impAllowObjectDacl  newdacl.AddAce aceNext'' Inherited Aces'For Each ace In InheritedDacl  newdacl.AddAce aceNextsd.DiscretionaryAcl = newdaclDebug.Print DateFor Each ace In newdacl   Debug.Print ace.Trustee   Debug.Print "Ace Mask: " & Hex(ace.AccessMask)   Debug.Print "Ace Type: " & Hex(ace.AceType)   Debug.Print "Ace Flags: " & Hex(ace.AceFlags)   Debug.Print "Object Type value: " & Hex(ace.Flags)   Debug.Print "Object Guid : " & ace.ObjectTypeNext'' Set the appropriate revision level' for the DACL'newdacl.AclRevision = dacl.AclRevision'' Replace the Security Descriptor'sec.SetSecurityDescriptor sd' If this generates the error -214023559 or 80070539 check your TODO' strings.  This error is most likely a problem with DNS name resolution.				
Referanslar
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
269175Visual C++ düzgün da ACE'leri bir ACL sipariş nasıl
279682Bir NTFS klasörüne bir erişim denetim girdisi eklemek için ADsSecurity.dll nasıl kullanılır
Active Directory istemci uzantısı'nı yükleme hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
288358Active Directory istemci uzantısı nasıl yüklenir (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 269159 - Son İnceleme: 01/15/2007 09:08:14 - Düzeltme: 7.1

Microsoft Active Directory Service Interfaces 2.5, Microsoft Active Directory Service Interfaces 2.5, Microsoft Windows Scripting Host 2.5

  • kbmt kbdswadsi2003swept kbhowto KB269159 KbMttr
Geri bildirim