Bagikan melalui


Mengatur Hak Akses pada Objek

Saat menggunakan objek ADSI COM IADsSecurityDescriptor (deskriptor keamanan), IADsAccessControlList (DACLs dan SACLs), dan IADsAccessControlEntry (ACE) untuk menambahkan ACE ke ACL, Anda membuat perubahan pada properti nTSecurityDescriptor dari objek yang ditentukan dalam cache properti. Ini berarti menempatkan metode pada objek yang berisi ACE baru dan metode IADs.SetInfo harus dipanggil untuk menulis deskriptor keamanan yang diperbarui ke direktori dari cache properti.

Untuk informasi selengkapnya dan contoh kode yang mengatur ACE pada objek di Active Directory Domain Services, lihat Contoh Kode untuk Mengatur ACE pada Objek Direktori.

Gunakan proses umum berikut untuk membuat ACE untuk hak akses dan mengatur ACE tersebut pada DACL objek.

  1. Dapatkan penunjuk antarmuka IAD ke objek.

  2. Gunakan metode IADs.Get untuk mendapatkan deskriptor keamanan objek. Nama properti yang berisi deskriptor keamanan adalah nTSecurityDescriptor. Properti akan dikembalikan sebagai VARIAN yang berisi pointer IDispatch (anggota vt VT_DISPATCH). Panggil QueryInterface pada penunjuk IDispatch tersebut untuk mendapatkan antarmuka IADsSecurityDescriptor untuk menggunakan metode pada antarmuka tersebut untuk mengakses ACL deskriptor keamanan.

  3. Gunakan properti IADsSecurityDescriptor.DiscretionaryAcl untuk mendapatkan DACL. Metode mengembalikan penunjuk IDispatch. Panggil QueryInterface pada penunjuk IDispatch tersebut untuk mendapatkan antarmuka IADsAccessControlList untuk menggunakan metode pada antarmuka tersebut untuk mengakses ACL individual di ACL.

  4. Gunakan CoCreateInstance untuk membuat objek ADSI COM untuk ACE baru dan dapatkan penunjuk antarmuka IADsAccessControlEntry ke objek tersebut. Ketahuilah bahwa ID kelas CLSID_AccessControlEntry.

  5. Atur properti ACE menggunakan metode IADsAccessControlEntry:

    1. Gunakan IADsAccessControlEntry::p ut_Trustee untuk mengatur wali yang diterapkan ACE ini. Wali adalah pengguna, grup, atau prinsip keamanan lainnya. Aplikasi Anda harus menggunakan nilai dari properti yang sesuai dari objek pengguna atau grup wali yang ingin Anda terapkan ACE. Wali ditentukan sebagai BSTR dan dapat mengambil formulir berikut:
      • Akun domain (nama masuk yang digunakan dalam versi Windows NT sebelumnya) dari formulir "domain\user account>" di mana "<domain>" adalah nama domain Windows NT yang berisi pengguna dan "<akun> pengguna" adalah properti sAMAccountName dari pengguna yang ditentukan.<>< Misalnya: "fabrikam\jeffsmith".
      • Prinsip keamanan terkenal yang mewakili identitas khusus yang ditentukan oleh sistem keamanan Windows NT, seperti semua orang, sistem lokal, prinsipal diri, pengguna terautentikasi, pemilik pembuat, dan sebagainya. Objek yang mewakili prinsip keamanan terkenal disimpan dalam kontainer Well Known Security Principals di bawah kontainer Konfigurasi. Misalnya, masuk anonim.
      • Grup bawaan yang mewakili grup pengguna bawaan yang ditentukan oleh sistem keamanan Windows NT. Ini memiliki formulir "BUILTIN\<group name>" di mana "<nama> grup" adalah nama grup pengguna bawaan. Objek yang mewakili grup bawaan disimpan dalam kontainer Bawaan di bawah kontainer domain. Misalnya, "BUILTIN\Administrators".
      • SID (format string) dari pengguna yang ditentukan, yang merupakan properti objectSID dari pengguna yang ditentukan. Anda dapat mengonversi ke formulir string menggunakan fungsi ConvertSidToStringSid di API Keamanan Win32. Misalnya: "S-1-5-32-548".
    2. Gunakan properti IADsAccessControlEntry.AccessMask untuk mengatur masker yang menentukan hak akses. Enumerasi ADS_RIGHTS_ENUM menentukan hak akses yang dapat Anda atur pada objek direktori.
    3. Gunakan properti IADsAccessControlEntry.AceType untuk menentukan apakah akan mengizinkan atau menolak hak akses yang ditetapkan oleh AccessMask. Untuk hak standar, ini dapat ADS_ACETYPE_ACCESS_ALLOWED atau ADS_ACETYPE_ACCESS_DENIED. Untuk hak khusus objek (hak yang berlaku untuk bagian tertentu dari objek atau ke jenis objek tertentu), gunakan ADS_ACETYPE_ACCESS_ALLOWED_OBJECT atau ADS_ACETYPE_ACCESS_DENIED_OBJECT. Enumerasi ADS_ACETYPE_ENUM menentukan jenis akses yang dapat Anda atur pada ACE.
    4. Gunakan properti IADsAccessControlEntry.AceFlags untuk menentukan apakah kontainer atau objek lain di bawah objek yang ditentukan dapat mewarisi ACE. Enumerasi ADS_ACEFLAG_ENUM menentukan bendera pewarisan yang dapat Anda atur pada ACE.
    5. Gunakan properti IADsAccessControlEntry.Flags untuk menentukan apakah hak berlaku untuk bagian tertentu dari objek, jenis objek yang diwariskan, atau keduanya.
    6. Jika Bendera diatur ke ADS_FLAG_OBJECT_TYPE_PRESENT, atur properti IADsAccessControlEntry.ObjectType o menentukan string yang berisi GUID kelas objek (untuk ADS_RIGHT_DS_CREATE_CHILD atau ADS_RIGHT_DS_DELETE_CHILD), properti, kumpulan properti, penulisan tervalidasi, atau hak diperluas yang berlaku untuk ACE. GUID harus ditentukan sebagai string formulir yang dihasilkan oleh fungsi StringFromGUID2 di pustaka COM.
    7. Jika Bendera diatur ke ADS_FLAG_INHERITED_OBJECT_TYPE_PRESENT, atur properti IADsAccessControlEntry.InheritedObjectType untuk menentukan string yang berisi GUID kelas objek yang diwariskan yang diterapkan ACE. GUID harus ditentukan sebagai string formulir yang dihasilkan oleh fungsi StringFromGUID2 di pustaka COM.
  6. Gunakan metode QueryInterface pada objek IADsAccessControlEntry untuk mendapatkan pointer IDispatch. Metode IADsAccessControlList.AddAce memerlukan penunjuk antarmuka IDispatch ke ACE.

  7. Gunakan IADsAccessControlList.AddAce untuk menambahkan ACE baru ke DACL. Ketahuilah bahwa urutan ACE dalam ACL dapat memengaruhi evaluasi akses ke objek. Akses yang benar ke objek mungkin mengharuskan Anda untuk membuat ACL baru, menambahkan ACL dari ACL yang ada dalam urutan yang benar ke ACL baru, lalu mengganti ACL yang ada di deskriptor keamanan dengan ACL baru. Untuk informasi selengkapnya, lihat Urutan ACE di DACL.

  8. Gunakan properti IADsSecurityDescriptor.DiscretionaryAcl untuk menulis DACL yang berisi ACE baru ke deskriptor keamanan. Untuk informasi selengkapnya tentang DACL, lihat DACL Null dan DACL Kosong.

  9. Gunakan metode IADs.Put untuk menulis deskriptor keamanan ke properti nTSecurityDescriptor objek ke cache properti.

  10. Gunakan metode IADs.SetInfo untuk memperbarui properti pada objek di direktori.