Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Làm thế nào để sử dụng Visual Basic và ADsSecurity.dll để đúng ACEs trong một ACL

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:269159
Khước từ Nội dung trong Cơ sở Kiến thức Không còn được hỗ trợ
Bài viết này nói về các sản phẩm mà Microsoft không còn hỗ trợ nữa. Do đó, bài viết này được cung cấp "nguyên bản" và sẽ không được cập nhật.
TÓM TẮT
Bài viết này cho thấy làm thế nào để sử dụng ADsSecurity.dll để có được một mô tả bảo mật (SD) cho một tập tin, đối tượng Active Directory hoặc khóa sổ đăng ký. Bài viết này chứng tỏ làm thế nào, một khi một SD đã thu được, để lấy danh sách điều khiển truy cập tùy (ACL) từ đó SD và sau đó thêm một mục điều khiển truy cập (ACE) ở vị trí thích hợp. Bài viết cung cấp một thuật toán đơn giản cùng với một Microsoft Visual Basic mã ví dụ minh hoạ làm thế nào để đúng cách đặt hàng một ACL thì viết ACL trở lại để SD.
THÔNG TIN THÊM
Phương pháp IADsAccessControlList::AddAce cho biết thêm các ACE ở đầu ACL. Trong một số trường hợp, thêm một ACE ở phía trên sẽ tạo an ninh không mong muốn truy cập. Active Directory dịch vụ giao diện (ADSI) tài sản cache trên Microsoft Windows Server 2003 và trên Microsoft Windows XP một cách chính xác sẽ đặt DACL trước khi ghi nó trở lại vào các đối tượng. Sắp xếp lại chỉ có yêu cầu trên Microsoft Windows 2000. Lệnh thích hợp asów trong một ACL là như sau:
Truy cập từ chối ACEs áp dụng cho đối tượng chính nó
Truy cập từ chối ACEs áp dụng cho một đứa trẻ của đối tượng, như là một tài sản tập hoặc bất động sản
ACEs truy cập phép áp dụng cho đối tượng chính nó
ACEs truy cập phép áp dụng cho một đứa trẻ của đối tượng, như là một tài sản tập hoặc bất động sản
Trong các sản phẩm được liệt kê trong bài viết này, giao diện IADsAccessControlList không hỗ trợ một phương pháp mà đúng ra lệnh cho một ACL. Các ACEs phải được sắp xếp vào các năm nhóm:
Bị từ chối truy cập vào đối tượng
Bị từ chối truy cập vào một đứa trẻ hay bất động sản
Cho phép truy cập vào đối tượng
Cho phép truy cập vào một đứa trẻ hay bất động sản
Tất cả thừa kế ACEs
Đặt hàng cho ACEs được thừa kế không nên được thay đổi. Tất cả được thừa kế ACEs được bổ sung bởi hệ điều hành và được đặt hàng một cách thích hợp. Một lập trình viên có thể chỉ định một ACE nên được thừa hưởng và Windows 2000 hoặc Windows NT sẽ chăm sóc của cấm ACE để các đối tượng con.

Đó là một ngoại lệ cho quy tắc tuyên truyền. Áp aCEs thêm vào một đối tượng ACL sẽ không tự động nhận được dụng cho các đối tượng hiện có trong cây. Nó là trách nhiệm của các lập trình viên đi bộ cây và tuyên truyền các ACE bằng cách thêm các ACE để các đối tượng hiện có. Các ACE sẽ được phổ biến trên các đối tượng mới trong subtree.

Thuật toán để phân loại ACEs trong một ACL

  1. Có được tùy ACL (DACL) từ mô tả bảo mật.
  2. Kiểm tra IADsAccessControlEntry::AceFlags để xem nếu các ACE thừa hưởng (kiểm tra ADS_ACEFLAG_INHERITED_ACE chút).
  3. Kiểm tra IADsAccessControlEntry::AceType để xem những gì loại truy cập các ACE cấp và những gì các truy cập được cấp cho (các đối tượng riêng của mình hoặc thuộc tính của đối tượng). Danh sách sau vạch ra các giá trị loại ACE và những gì họ có nghĩa là:
    ADS_ACETYPE_ACCESS_ALLOWED - cấp được phép truy cập vào đối tượng toàn bộ
    ADS_ACETYPE_ACCESS_ALLOWED_OBJECT - cho thấy hoạt động truy cập được cho phép để một tài sản hoặc thiết lập bất động sản
    ADS_ACETYPE_ACCESS_DENIED - từ chối truy cập vào đối tượng toàn bộ
    ADS_ACETYPE_ACCESS_DENIED_OBJECT - từ chối truy cập vào một tài sản hoặc thiết lập bất động sản.
  4. Nơi ACE trong tạm thời DACL thích hợp dựa trên giá trị IADsAccessControlListEntry::AceType.
  5. Xây dựng lại ACL từ ACLs riêng biệt theo thứ tự sau:
    ADS_ACETYPE_ACCESS_DENIED ACE loại
    ADS_ACETYPE_ACCESS_DENIED_OBJECT ACE loại
    ADS_ACETYPE_ACCESS_ALLOWED ACE loại
    ADS_ACETYPE_ACCESS_ALLOWED_OBJECT ACE loại
    ACEs với ADS_ACEFLAG_INHERITED_ACE cờ bối cảnh IADsAccessControlListEntry::AceFlags
  6. Thiết lập ACL mới để sửa đổi cùng cấp như ACL cũ.
  7. Thay thế ACL vào mô tả bảo mật.

Bước để sử dụng mã Visual Basic được cung cấp trong bài viết này

  1. Đăng ký ADsSecurity.dll.

    ADsSecurity.dll là một phần của hoạt động thư mục dịch vụ giao diện (ADSI) 2.5 Resource Kit. Để tải về các ADSI 2.5 Resource kit, ghé thăm Web site sau của Microsoft: Sử dụng Regsvr32 để đăng ký ADsSecurity.dll. Nếu này DLL không đăng ký một cách chính xác, hành vi này chỉ ra rằng ADSI không được cài đặt. Nếu bạn đang chạy mã trên một máy tính dựa trên Microsoft Windows NT hoặc trên một máy tính dựa trên Microsoft Windows 98, cài đặt mở rộng khách hàng thư mục hoạt động thích hợp. Để biết thêm chi tiết về làm thế nào để có được các khách hàng, hãy xem phần "Tham khảo".
  2. Bắt đầu Visual Basic. Sau đó, tạo ra một dự án EXE tiêu chuẩn.
  3. Xem các Tham khảo cho dự án. Đảm bảo rằng việc theo được chọn:
    • Thư viện DS kiểu hoạt động
    • Thư viện kiểu ADsSecurity 2.5
  4. Làm cho một nút lệnh về hình thức.
  5. Bấm đúp nút lệnh. Sau đó, dán đoạn mã sau trong các Command1_Click xử lý lệnh.

Visual Basic mẫu mã minh hoạ làm thế nào để thực hiện thuật toán phân loại

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.				
THAM KHẢO
Để biết thêm chi tiết, nhấp vào số bài viết sau để xem các bài viết trong cơ sở kiến thức Microsoft:
269175Làm thế nào để sử dụng Visual c ++ để đúng ACEs trong một ACL
279682 Làm thế nào để sử dụng ADsSecurity.dll để thêm một mục nhập kiểm soát truy cập vào một thư mục NTFS
Để biết thêm chi tiết về làm thế nào để cài đặt thư mục khách hàng mở rộng hoạt động, nhấp vào số bài viết sau để xem bài viết trong cơ sở kiến thức Microsoft:
288358Làm thế nào để cài đặt phần mở rộng hoạt động thư mục khách hàng

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 269159 - Xem lại Lần cuối: 08/22/2011 11:02:00 - Bản sửa đổi: 2.0

  • kbdswadsi2003swept kbhowto kbmt KB269159 KbMtvi
Phản hồi