Cara menggunakan Visual Basic dan ADsSecurity.dll dengan benar memesan ACEs di ACL

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 269159
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menunjukkan cara menggunakan ADsSecurity.dll untuk mendapatkan keterangan keamanan (SD) untuk file, objek direktori aktif, atau kunci registri. Artikel ini menunjukkan bagaimana, setelah SD telah diperoleh, untuk mengambil daftar kendali discretionary akses (ACL) dari SD itu dan kemudian menambahkan entri kontrol akses (ACE) di lokasi yang tepat. Artikel ini memberikan algoritma sederhana bersama dengan Microsoft Visual Basic kode contoh yang menggambarkan cara benar memesan ACL kemudian menulis ACL kembali ke SD.

INFORMASI LEBIH LANJUT

Metode IADsAccessControlList::AddAce menambahkan ACE di atas ACL. Dalam beberapa kasus, menambahkan ACE di atas akan membuat pencet keamanan akses. Antarmuka layanan direktori aktif (ADSI) properti cache pada Microsoft Windows Server 2003 dan pada Microsoft Windows XP dengan benar akan memesan DACL sebelum menulis kembali ke objek. Penataan kembali hanya diperlukan pada Microsoft Windows 2000. Urutan tepat ACEs di ACL adalah sebagai berikut:
Akses ditolak ACEs yang berlaku untuk objek itu sendiri
Akses ditolak ACEs yang berlaku untuk anak objek, seperti mengatur properti atau properti
ACEs memungkinkan akses yang berlaku untuk objek itu sendiri
ACEs memungkinkan akses yang berlaku untuk anak objek, seperti mengatur properti atau properti
Dalam produk yang tercantum dalam artikel ini, antarmuka IADsAccessControlList tidak mendukung metode yang benar memerintahkan ACL. The ACEs harus disusun dalam lima kelompok:
Akses ditolak pada objek
Akses ditolak pada anak-anak atau properti
Memungkinkan akses pada objek
Akses diperbolehkan pada anak-anak atau properti
Semua mewarisi ACEs
Memesan untuk ACEs warisan harus tidak diubah. Semua warisan ACEs ditambahkan oleh sistem operasi dan memerintahkan tepat. Programmer dapat menentukan bahwa ACE harus mewarisi dan Windows 2000 atau Windows NT akan mengurus menyebarkan ACE untuk objek anak-anak.

Ada pengecualian untuk aturan propagasi. ACEs ditambahkan ke objek ACL tidak secara otomatis mendapatkan diterapkan untuk benda-benda yang ada di pohon. Ini adalah tanggung jawab para programmer untuk berjalan pohon dan menyebarkan ACE dengan menambahkan ACE untuk benda-benda yang ada. ACE akan diterapkan pada objek baru dalam sub pohon.

Algoritma untuk memilah ACEs di ACL

  1. Memperoleh discretionary ACL (DACL) dari kata kunci keamanan.
  2. Periksa IADsAccessControlEntry::AceFlags untuk melihat apakah ACE mewarisi (periksa ADS_ACEFLAG_INHERITED_ACE sedikit).
  3. Periksa IADsAccessControlEntry::AceType untuk melihat apa jenis akses ACE hibah dan apa akses diberikan kepada (objek itu sendiri atau properti objek). Daftar berikut menguraikan nilai-nilai tipe ACE dan apa yang mereka berarti:
    ADS_ACETYPE_ACCESS_ALLOWED - memberikan akses diperbolehkan untuk seluruh objek
    ADS_ACETYPE_ACCESS_ALLOWED_OBJECT - menunjukkan akses diperbolehkan untuk properti atau properti diatur
    ADS_ACETYPE_ACCESS_DENIED - menolak akses ke seluruh objek
    ADS_ACETYPE_ACCESS_DENIED_OBJECT - menolak akses ke properti atau properti diatur.
  4. Tempat ACE di DACL sementara tepat berdasarkan nilai IADsAccessControlListEntry::AceType.
  5. Membangun kembali ACL dari ACLs terpisah dalam urutan berikut:
    Jenis ADS_ACETYPE_ACCESS_DENIED ACE
    Jenis ADS_ACETYPE_ACCESS_DENIED_OBJECT ACE
    Jenis ADS_ACETYPE_ACCESS_ALLOWED ACE
    Jenis ADS_ACETYPE_ACCESS_ALLOWED_OBJECT ACE
    ACEs dengan bendera ADS_ACEFLAG_INHERITED_ACE di IADsAccessControlListEntry::AceFlags
  6. Mengatur ACL baru untuk tingkat revisi yang sama sebagai ACL tua.
  7. Menggantikan ACL pada kata kunci keamanan.

Langkah-langkah untuk menggunakan kode Visual Basic yang tersedia di dalam artikel ini

  1. Mendaftar ADsSecurity.dll.

    ADsSecurity.dll adalah bagian dari Active Directory Service antarmuka (ADSI) 2.5 Resource Kit. Untuk men-download ADSI 2,5 Resource kit, kunjungi Web site Microsoft berikut:
    http://www.Microsoft.com/technet/Archive/winntas/Downloads/adsi25.mspx?mfr=True
    Menggunakan Regsvr32 untuk mendaftar ADsSecurity.dll. Jika ini DLL tidak mendaftar dengan benar, perilaku ini menunjukkan bahwa ADSI tidak diinstal. Jika Anda menjalankan kode pada komputer berbasis Microsoft Windows NT atau pada komputer berbasis Microsoft Windows 98, menginstal sesuai ekstensi klien direktori aktif. Untuk informasi lebih lanjut tentang cara mendapatkan klien ini, lihat bagian "Referensi".
  2. Mulai Visual Basic. Kemudian, membuat proyek EXE standar.
  3. Lihat Referensi untuk proyek. Pastikan bahwa tindak dipilih:
    • Active DS Type Library
    • Perpustakaan jenis ADsSecurity 2,5
  4. Membuat tombol perintah pada formulir.
  5. Klik dua kali tombol perintah. Kemudian, paste kode berikut di Command1_Click perintah handler.

Visual Basic kode contoh menggambarkan bagaimana menerapkan algoritma sorting

Dim sec As New ADsSecurity
Dim sd As IADsSecurityDescriptor
Dim dacl As IADsAccessControlList
Dim ace As IADsAccessControlEntry
Dim newAce As New AccessControlEntry
'
' Declare temporary ACLs for sorting the original
' ACL
'
Dim newdacl As New AccessControlList
Dim ImpDenyDacl As New AccessControlList
Dim ImpDenyObjectDacl As New AccessControlList
Dim InheritedDacl As New AccessControlList
Dim ImpAllowDacl As New AccessControlList
Dim impAllowObjectDacl As New AccessControlList

Private 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.DiscretionaryAcl
Debug.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)
Next

Debug.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_PRESENT
newAce.ObjectType = "{BF967A68-0DE6-11D0-A285-00AA003049E2}"
newAce.AccessMask = ADS_RIGHT_DS_READ_PROP Or ADS_RIGHT_DS_WRITE_PROP
newAce.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECT
newAce.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 If
Next
'
' 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 ace
Next
'
' Implicit Deny Object
'
For Each ace In ImpDenyObjectDacl
  newdacl.AddAce ace
Next
'
' Implicit Allow
'
For Each ace In ImpAllowDacl
  newdacl.AddAce ace
Next
'
' Implicit Allow Object
'
For Each ace In impAllowObjectDacl
  newdacl.AddAce ace
Next
'
' Inherited Aces
'
For Each ace In InheritedDacl
  newdacl.AddAce ace
Next

sd.DiscretionaryAcl = newdacl
Debug.Print Date
For 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.ObjectType
Next
'
' 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.
				

REFERENSI

Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel pada Basis Pengetahuan Microsoft:
269175Cara menggunakan Visual C++ benar memesan ACEs di ACL
279682 Cara menggunakan ADsSecurity.dll untuk menambahkan entri kontrol akses ke map NTFS
Untuk informasi tambahan tentang cara menginstal ekstensi klien direktori aktif, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
288358Cara menginstal ekstensi klien direktori aktif

Properti

ID Artikel: 269159 - Kajian Terakhir: 22 September 2011 - Revisi: 2.0
Kata kunci: 
kbdswadsi2003swept kbhowto kbmt KB269159 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:269159
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan ?sebagaimana adanya? dan tidak akan diperbarui.

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com