Windows.  Viruslar.  Noutbuklar.  Internet.  Idora.  Utilitalar.  Haydovchilar

1

Ba'zi foydalanuvchilarga ma'lum vazifalarni bajarishga imkon berish uchun PHPda oddiy veb-sayt ishlab chiqyapman. Mening maqsadim - foydalanuvchilar uchun rolga asoslangan avtorizatsiyani olish va ular LDAP guruhiga a'zoligiga ko'ra turli sahifalarni ko'rishlari kerak. Men ITni shu tarzda amalga oshirishga harakat qilaman

1) LDAP serveriga ulanish uchun php-ldap kutubxonasi funksiyalaridan foydalaning 2) foydalanuvchi bazasi dn va guruh bazasi dn dan ldapsearch orqali guruh nomi va foydalanuvchi nomining dn-ni chiqarib oling 3) qidiruv uchun Foydalanuvchi yozuvidagi "memberOf" atributlari va ularni dn guruhi bilan moslang. Agar mos kelsa, true qiymatini qaytaring 4) Guruh yozuvidagi “aʼzo” atributlarini qidiring va ularni foydalanuvchi dn bilan moslang. Agar mos kelsa, true qiymatini qaytaring.

Hozirgacha men buni OpenLDAP serverida sinab ko'rdim va u ishlayotganga o'xshaydi, lekin skript ApacheDS, Active Directory va 389ds kabi boshqa katalog serverlari bilan ishlashini xohlayman. Menda bir nechta katalog serverlariga kirish imkonim yo'qligi sababli, bu qadamlar boshqa katalog serverlarida ishlaydimi yoki yo'qmi, sizga xabar bermoqchiman. Bu borada har qanday yordam minnatdor bo'ladi. Oldindan rahmat.

0

Mana Mening maxsus filtrim (& (| (objectClass = shaxs) (objectClass = inetOrgPerson)) (| (uid = ($username)) (cn = ($username)) (sAMAccountname = ($username))) ) " va guruh qidiruv filtri" (| (objectClass = groupOfNames) (objectClass = posixGroup)) " - Anindya Mukherji 09 sentyabr 14 2014-09-09 14:37:05

  • 1 javob
  • Tartiblash:

    Faoliyat

0

Ushbu qadamlar asosan boshqa LDAP serverlarida ishlaydi. Siz foydalanadigan atributlarni o'zgartirishingiz kerak bo'ladi, chunki ActiveDirectory, masalan, samAccountName atributidan foydalanadi, bu erda standart LDAP sxemasi uiddan foydalanadi.

https://github.com/heiglandreas/kimai/blob/feature/fixLDAPAuthentication/core/libraries/Kimai/Auth/Ldapadvanced.php ni ko'ring, unda ba'zi foydali parchalar bo'lishi mumkin. Bu foydalanuvchi tugunida guruh a'zoligi aniqlangan muammoni hisobga olmaydi!

0

Ma'lumot uchun rahmat. Mening foydalanuvchi qidiruv filtrim inetOrgPerson yoki "shaxs" ob'ekt atributlarini va "uid" yoki "cn" yoki "sAMAccountname" atributlarini qidiradi, shuning uchun u AD uchun ishlashi kerak. Guruh ma'lumotlarini foydalanuvchi yozuvida saqlashga kelsak, men jarayon oqimini o'zgartirdim, shunda foydalanuvchi yozuvi avval guruh ma'lumotlari uchun tekshiriladi va agar noto'g'ri bo'lsa, guruhdagi guruhni qidiring. Mening tashvishim shundaki, agar boshqa katalog serveri foydalansa nostandart usul va guruh ma'lumotlarini saqlash uchun boshqa atribut va/yoki ob'ekt sinfi. -

16 yil oldin

AD Win2K-ga foydalanuvchini qanday qo'shishni bilmasangiz, ushbu skriptni sinab ko'ring.
Atributlar haqida ko'proq ma'lumotga ega bo'lish uchun Win2K uchun qo'llab-quvvatlash vositalarida adsiedit konsolini oching.

$adduserAD["cn"] =
$adduserAD["instancetype"] =
$adduserAD["objectclass"] = "yuqori";
$adduserAD["objectclass"] = "odam";
$adduserAD["objectclass"] = "organizationalPerson";
$adduserAD["objectclass"] = "foydalanuvchi";
$adduserAD["displayname"] =
$adduserAD["name"] =
$adduserAD["verilgan nom"] =
$adduserAD["sn"] =
$adduserAD["kompaniya"] =
$adduserAD["bo'lim"] =
$adduserAD["title"] =
$adduserAD["tavsif"] =
$adduserAD["mail"] =
$adduserAD["bosh harflar"] =
$adduserAD["samaccountname"] =
$adduserAD["userprincipalname"] =
$adduserAD["profilepath"] =
$adduserAD["manager"] = ***DistinguishedName-dan foydalaning***

agar (!($ldap = ldap_connect("localhost"))) (
die("LDAP serveriga ulanib bo'lmadi");
}
agar (!($res = @ldap_bind($ldap, " [elektron pochta himoyalangan]", $parol))) (
die("LDAP hisobiga ulanib bo'lmadi");
}
agar (!(ldap_add($ldap, "CN=Yangi foydalanuvchi,OU=OU foydalanuvchilari,DC=pc,DC=com", $adduserAD)))(
echo "Hisob yaratishda muammo bor
echo "Iltimos, administratoringizga murojaat qiling!";
Chiqish;
}
ldap_unbind($ldap);

12 yil oldin

OpenLDAP-ga MD5 paroliga ega foydalanuvchini qanday qo'shish mumkin. Men ushbu usuldan Drupal hisoblarini bir martalik kirish yechimi uchun OpenLDAP-ga ko'chirish uchun foydalandim.

Buning hiylasi - OpenLDAP-ga paroldan oldin xesh turini (masalan, (MD5)) aytib berish, shuningdek, BINARY xesh natijasini base64 kodlash. Siz PHP ning md5() yoki sha() xesh funksiyalari tomonidan qaytariladigan narsani faqat base64 kodlay olmaysiz, chunki ular oʻn oltilik matn qatorini qaytaradi. Buni ikkilik qatorga aylantirish uchun avval pack("H*", $hash_result) dan foydalaning. , KEYIN Siz .. qila olasiz; siz ... mumkin base64 uni kodlaydi.

Bu erda parol bilan foydalanuvchini ulash va qo'shish uchun to'liq kod. (MD5) dan foydalanishingiz shart emas, agar sizda shunday bo'lsa, boshqa xeshni tanlashingiz mumkin. Ushbu xeshlangan parollardan birining chiqishi quyidagicha ko'rinadi: (md5)bdwD04RS9xMDGVi1n/H36Q==

Nihoyat, ba'zi ogohlantirishlar: Agar siz parolni tuz qiymatidan foydalangan holda xeshlangan bo'lsangiz, bu usul ishlamaydi (lekin Drupal buni qilmaydi). Bu texnika ham, albatta, ishlamaydi faol katalog, bu erda parollar faqat SSL ulanishlari orqali o'rnatilishi mumkin va xeshlash boshqacha ishlaydi.

$ds = ldap_connect($serverAddress);
agar ($ds) (
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // aks holda PHP standarti ldap v2 ga o'rnatiladi va siz Sintaksis xatosini olasiz!
$r = ldap_bind ($ds, $managerDN, $managerPassword);
$ldaprecord["cn"] = $newuser_username;
$ldaprecord["givenName"] = $newuser_firstname;
$ldaprecord["sn"] = $newuser_familiyasi;
// foydalanuvchini objectClass inetOrgPerson-ga qo'ying, shunda biz pochta va telefon raqami atributlarini o'rnatishimiz mumkin
$ldaprecord["objectclass"] = "odam";
$ldaprecord["objectclass"] = "organizationalPerson";
$ldaprecord["objectclass"] = "inetOrgPerson";
$ldaprecord["pochta"] = $newuser_email_address;
$ldaprecord["telephoneNumber"] = $newuser_phone_number;
// va endi murakkab qism, base64 ikkilik xesh natijasini kodlaydi:
$ldaprecord["userPassword"] = "(MD5)" . base64_encode(paket("H*",$newuser_md5hashed_password));
// Agar sizda oddiy matn paroli bo'lsa, siz quyidagilarni ishlatishingiz mumkin:
// $ldaprecord["userPassword"] = "(MD5)" . base64_encode(pack("H*",md5($newuser_plaintext_password)));
$r = ldap_add ($ds, $base_user_dn, $ldaprecord);
) else ( "$serverAddress manzilidagi LDAP serveriga ulanib bo'lmaydi."; )

11 yil oldin

Men Active Directory-da global tarqatish guruhlarini yaratish uchun chaqirilishi mumkin bo'lgan oddiy funktsiyani yaratdim:

ldap_createGroup funktsiyasi ($object_name, $dn, $a'zolar, $ldap_conn)
{
$addgroup_ad [ "cn" ]= " $object_name " ;
$addgroup_ad [ "objectClass" ][ 0 ] = "yuqori" ;
$addgroup_ad [ "objectClass" ][ 1 ] = "guruh" ;
$addgroup_ad [ "groupType" ]= "2" ;
$addgroup_ad [ "a'zo" ]= $a'zolar;
$addgroup_ad [ "sAMAccountName" ] = $object_name ;

Ldap_add ($ldap_conn, $dn, $addgroup_ad);

If(ldap_error($ldap_conn) == "Muvaffaqiyat")
rostni qaytarish;
boshqa
noto'g'ri qaytarish;
}
?>

Siz ushbu funktsiyani quyidagi kod yordamida chaqirishingiz mumkin:

$ldap_conn = ldap_bind();
$object_name = "Sinov guruhi" ;
$dn = "CN=" . $object_name. ",OU=PathToAddGroupTo,OU=Barcha foydalanuvchilar,DC=YOURDOMAIN,DC=COM";
$a'zolar = "CN=User1,OU=PathToAddGroupTo,OU=Barcha foydalanuvchilar,DC=YOURDOMAIN,DC=COM";
$a'zolar = "CN=User2,OU=PathToAddGroupTo,OU=Barcha foydalanuvchilar,DC=YOURDOMAIN,DC=COM";

Ldap_createGroup($object_name, $dn, $a'zolar, $ldap_conn);
?>

Men yaratgan boshqa funktsiya ldap_bind() va bu LDAP serveriga ulanish uchun ishlatilishi mumkin:

ldap_bind() funktsiyasi
{
$ldap_addr = "192.168.1.1" ; // Buni LDAP serverining IP manziliga o'zgartiring
$ldap_conn = ldap_connect ($ldap_addr ) yoki o'ladi ("Ulanib bo'lmadi!" );
ldap_set_option ($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
$ldap_rdn = "domen_name\\user_account" ;
$ldap_pass = "user_password" ;

// Foydalanuvchini domen boshqaruvchisiga nisbatan autentifikatsiya qilish
$flag_ldap = ldap_bind ($ldap_conn, $ldap_rdn, $ldap_pass);
$ldap_connni qaytarish;
}
?>

13 yil oldin

Foydalanuvchi uchun atributlarni qo‘shish/tahrirlashda “a’zo” atributi alohida holat ekanligini yodda tuting. MemberOf atributi foydalanuvchi sxemasining mavjud atributi emas. Guruhga birovni qo'shish uchun siz guruhdagi foydalanuvchini qo'shishingiz kerak, lekin foydalanuvchi guruhini emas. Buni guruh atributiga kirish orqali amalga oshirishingiz mumkin "a'zo":

$group_name = "CN = MyGroup, OU = Guruhlar, DC = misol, DC = com";
$group_info [ "a'zo" ] = $dn ; // Foydalanuvchining DN-si guruhning "a'zo" qatoriga qo'shiladi
ldap_mod_add ($connect, $group_name, $group_info);

?>

11 yil oldin

Bu yechim biz uchun ishlaydi.
Shaklda CN va pwdtxt qat'iy qoidalardan tasodifiy hosil bo'ladi.
Bu skript yaratadi 50-60 foydalanuvchi i AD pr.day! va hech qachon xatolik bo'lmagan!

## Shakldan
$CN = $_POST["CN"];
$givenName = $_POST [ "givenName" ];
$SN = $_POST["SN"];
$mail = $_POST ["pochta" ];
$Telefon = $_POST [ "Telefon" ];
$pwdtxt = $_POST [ "pwdtxt" ];

$AD_server = "localhost:390" ; // Mahalliy Stunnel --> http://www.stunnel.org/
$AD_Auth_User = "[elektron pochta himoyalangan]" ; //Ma'muriy foydalanuvchi
$AD_Auth_PWD = "duppiduppdupp" ; //Parol

$dn = "CN=" . $CN. ",OU=Brukere,DC=talaba,DC=somwhere,DC=com";

## Unicode parolini yarating
$newPassword = "\"" . $pwdtxt . "\"" ;
$len = strlen ($newPassword);
$newPassw = "" ;

uchun($i = 0; $i< $len ; $i ++) {
$newPassw .= " ( $newPassword ( $i )) \000" ;
}

## REKLAMAGA ulaning
$ds = ldap_connect ($AD_server);
agar ($ds) (
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // MUHIM
$r = ldap_bind ($ds, $AD_Auth_User, $AD_Auth_PWD); //BIND

$ldaprecord [ "cn" ] = $CN ;
$ldaprecord [ "givenName" ] = $givenName ;
$ldaprecord [ "sn" ] = $SN ;
$ldaprecord [ "objectclass" ][ 0 ] = "yuqori" ;
$ldaprecord [ "objectclass" ][ 1 ] = "shaxs" ;
$ldaprecord [ "objectclass" ][ 1 ] = "organizationalPerson" ;
$ldaprecord [ "objectclass" ][ 2 ] = "foydalanuvchi" ;
$ldaprecord [ "pochta" ] = $mail ;
$ldaprecord [ "telephoneNumber" ] = $Telefon ;
$ldaprecord [ "unicodepwd" ] = $newPassw ;
$ldaprecord [ "sAMAccountName" ] = $CN ;
$ldaprecord [ "UserAccountControl" ] = "512" ;
//Bu foydalanuvchini o'chirib qo'yishning oldini olish uchun. -->
http: //support.microsoft.com/default.aspx?scid=kb;en-us;305144

$r = ldap_add ($ds, $dn, $ldaprecord);

) boshqa (
aks-sado LDAP serveriga ulanib bo'lmadi$AD_server." ;
}

?>

Bu kod misoli i AD foydalanuvchisini yaratadi.
Biz buni yaratish uchun ichki veb-sahifada ishlatamiz
simsiz tarmoqqa kira oladigan vaqtinchalik foydalanuvchilar.
Bizda 24 soatdan keyin foydalanuvchilarni o'chirib tashlaydigan .pl skripti mavjud.

11 yil oldin

Bir marta mantiqiy sintaksis (1.3.6.1.4.1.1466.115.121.1.7) bilan atributlar qoʻshishda muammolarga duch keldim.

$["boolean_attr"]=true; // menga bitta ogohlantirish bering, ldap_add(): Qo'shish: noto'g'ri sintaksis

Buning qiymatini belgilash orqali buni hal qildi:

$["boolean_attr"]="TRUE";

bu yordam berishi mumkin deb umid qilaman.

16 yil oldin

Jharnettning ldap_add-dan sukut bo'yicha o'chirilgan hisoblar haqidagi savoliga javoban biz yechim topdik.

userAccountControl atributi hisob o'chirilgan yoki yoqilganligini o'z ichiga olgan qiymatni o'z ichiga oladi. Biz uchun standart 546; biz buni 544 ga o'zgartirganimizda, hisob yoqilgan bo'ldi. userAccountControl-dagi har qanday qiymatni 2 ga o'zgartirish hisobni yoqish yoki o'chirish kabi ko'rinadi.

Hisob qaydnomasi yoqilgan yangi foydalanuvchi yaratish uchun quyidagi kod ishladi:

$adduserAD["userAccountControl"] = "544";

Biz ushbu elementni yuqoridagi misol qatoriga qo'shdik.

7 oy oldin

Active Directory-da guruh yarating

$ds = ldap_connect("IP-server/localhost");
$base_dn = "CN = Guruh nomi, OU = Tashkilot birligi, DC = Domen nomi, DC = com"; //guruhning ajratilgan nomi

Agar ($ds) (
// yangilanishga ruxsat berish uchun tegishli dn bilan bog'lang
ldap_bind ($ds, , "bir nechta parol");

// Guruhga a'zolarni qo'shish
$a'zo_massiv = massiv();
$a'zo_massivi[0] = "CN = Administrator, OU = Tashkilot birligi, DC = Domen nomi, DC = com";
$a'zo_massivi [ 1 ] = "CN = Foydalanuvchi, OU = Tashkilot birligi, DC = Domen nomi, DC = com";

$entry [ "cn" ] = "GroupTest" ;
$entry [ "samaccountname" ] = "GroupTest" ;
$entry [ "objectClass" ] = "Guruh" ;
$entry [ "description" ] = "Guruh testi!!" ;
$entry [ "a'zo" ] = $a'zo_array ;
$entry [ "groupType" ] = "2" ; //GroupType="2" - tarqatish / GroupType="1" - xavfsizlik

Ldap_add ($ds, $base_dn, $entry);

Ldap_yopish($ds);
) boshqa (
aks-sado "LDAP serveriga ulanib bo'lmadi";
}
?>

14 yil oldin

Yana bir qiziqarli narsa: ldap_add() bo'sh a'zoli massivlarni yoqtirmaydi: shuning uchun
massiv (
= "ism"
= ""
= "qiymat"
sintaksis xatosini keltirib chiqaradi!

Buni oddiy kod bilan hal qiling:

foreach ($originalobject $kalit => $qiymat)(
agar ($qiymat!= "")(
$object[$key] = $qiymat;
}
}

bu erda $originalobject - belgilanmagan massiv va $object - bo'sh a'zolarsiz.

19 yil oldin

Ldap_add() faqat $entry["atribut"][x]="value" ni *agar atribut uchun bir nechta qiymatlar bo'lsa* hurmat qiladi. Agar faqat bitta atribut qiymati bo'lsa, uni *MURAT* $entry["atribut"]="value" sifatida kiritish kerak yoki ldap_add() atribut qiymatini $entry[ ga qo'yganingiz o'rniga "Array" bo'lishini belgilaydi. "xususiyat"].

Buni avtomatik ravishda bajarish uchun men yozgan kichik tartib. kiritishni tahlil qilayotganda multi_add() dan foydalaning:
multi_add funktsiyasi ($atribut, $qiymat)
{
global $entry ; // siz qo'shmoqchi bo'lgan LDAP yozuvi

If(isset($entry [ $attribute ]))
if(is_array ($entry [ $atribut ]))
$entry [ $attribute ][ count ($entry [ $attribute ])] = $value ;
boshqa
{
$tmp = $entry [ $atribut];
unset($entry [ $atribut ]);
$entry [ $atribut ][ 0 ] = $tmp ;
$entry [ $attribute ][ 1 ] = $value ;
}
boshqa
$entry [ $attribute ] = $value ;
}
?>
multi_add() atribut uchun qiymat mavjudligini tekshiradi. bo'lmasa, uni $entry[$attribute]=$value sifatida qo'shadi. Agar atribut uchun qiymat allaqachon mavjud bo'lsa, u atributni massivga aylantiradi va bir nechta qiymatlarni to'g'ri qo'shadi.

Uni qanday ishlatish kerak:
switch($form_data_name)
{
case "telefon" : multi_add ( "telephoneNumber" , $form_data_value ); sindirish;
case "faks" : multi_add ("faksimileTelephoneNumber" , $form_data_value ); sindirish;
case "elektron pochta" : multi_add ("pochta" , $form_data_value ); sindirish;
...
}
?>
Men ishlab chiqqan tizimda formada ctype1, ctype2, ctype3 va boshqalar nomlari bilan ochiladigan menyular mavjud. va qiymatlar "faks, pochta, telefon ...". Haqiqiy aloqa ma'lumotlari (telefon raqami, faks, elektron pochta va boshqalar) kontakt1, kontakt2, kontakt3 va boshqalar. Foydalanuvchi kontakt turini (telefon, elektron pochta) tushiradi va keyin ma'lumotlarni (raqam, manzil, va hokazo) kiritadi.

Men yozuvni to'ldirish va bo'sh joylarni o'tkazib yuborish uchun o'zgaruvchan o'zgaruvchilardan foydalanaman. Juda toza shaklga kirish tizimini yaratadi. Agar sizga qiziq bo'lsa, menga elektron pochta xabarini yuboring, chunki men bu erda ruxsat etilgan eslatma hajmidan oshib ketdim deb o'ylayman. :-)

6 yil oldin

PosixAccount va shadowAccount ni ob'ekt sinfi sifatida qo'shishga harakat qilganimda, men "Ob'ekt sinfi buzilishi" ni olishda davom etdim. Ma'lum bo'lishicha, ushbu ob'ekt sinflarida men qo'shmagan juda ko'p talab qilinadigan maydonlar bor edi. Ishlayotgan foydalanuvchini eksport qilishingiz kerak bo'lishi mumkin (agar sizda phpLDAPadmin bo'lsa) va ularda qanday maydonlar mavjudligini aniq ko'ring, keyin uni skriptda aniq nusxalashga harakat qiling. Agar siz hamma narsani birinchi marta Massivga aylantirsangiz, zarar qilmaydi, keyin bu maydonlarni tuzatishingiz mumkin.

Drupal-ni osongina turli xil vazifalarni, shu jumladan ma'lum bir murakkablikdagi korporativ echimlarni amalga oshirish uchun universal vosita deb atash mumkin.
Shunday bo'ladiki, men asosan Drupalni korxonada, ichkarida ishlataman Intranet ega bo'lgan tarmoq Active Directory. Va to'liq bo'lishi uchun
tarmog'imiz infratuzilmasidan foydalaning, minimal dastur - bu saytlar va xizmatlarda Active Directory avtorizatsiyasi va bu erda Drupalda muammolar mavjud
yo'q, Lightweight Directory Access Protocol (LDAP) moduli tufayli.
Ushbu maqolada men sizga mening muhitimda qanday tuzilganligini aytmoqchiman va ehtimol kimdir maqolani foydali deb topadi.

Shunday qilib, darhol aytamanki, ushbu modul yordamida siz quyidagilarni ta'minlashingiz mumkin:
1. Tarmoqdagi LDAP avtorizatsiyasi (mening holimda u ishlatiladi Active Directory Microsoftdan)
2. Oxir-oqibat avtorizatsiyani sozlang (foydalanuvchi operatsion tizim hisobi ostida avtomatik ravishda tizimga kirganda)
3. Saytga kirishi mumkin bo'lgan va kira olmaydiganlarga kirishni cheklang.
4. Hisob atributlarini sinxronlash Active Directory saytdagi foydalanuvchi profili maydonlari bilan va aksincha.
5. Hisob qaydnomangizga kirishni o'zgartirgandan so'ng veb-saytdagi hisobingizni yangilash Active Directory(odatda xodimning familiyasini o'zgartirgandan keyin sodir bo'ladi - login xuddi shunday o'zgaradi)
6. Saytdagi foydalanuvchiga uning muayyan guruhdagi joylashuviga qarab rol belgilash Active Directory

Chunki Men hali ham Drupal 7 ning faol foydalanuvchisiman, shuning uchun men uning misolidan foydalanib, barcha ko'rsatmalarni beraman, lekin yana Drupal 8 ni o'yin-kulgi uchun ishga tushirganimda,
keyin modul Drupalning 7-versiyasi bilan deyarli bir xil ekanligini angladim.

Keling, modul ma'lumotlarini, shuningdek, ularning bog'liqliklarini o'zimizga ko'chirib olaylik Ctools Va Entity API. Modullar sahifasida biz quyidagi modullarni faollashtiramiz:

  1. LDAP autentifikatsiyasi
  2. LDAP avtorizatsiyasi (agar siz foydalanuvchining Active Directory guruhlaridagi joylashuvi asosida sayt yoki sayt rollariga kirishni cheklashingiz kerak bo'lsa, ixtiyoriy modul)
  3. LDAP avtorizatsiyasi - Drupal rollari (yuqorida tavsiflangan modulga qo'shimcha)
  4. LDAP serverlari
  5. LDAP SSO (modul ixtiyoriy, agar sizga oxirigacha avtorizatsiya kerak bo'lmasa yoki veb-server buning uchun sozlanmaguncha, uni o'rnatolmaysiz)
  6. LDAP foydalanuvchi moduli

Shuni ta'kidlash kerakki, agar modul sizning PHP sozlamalaringizda o'rnatilmagan bo'lsa, modul o'rnatilmaydi php_ldap. Shuning uchun, uni oldindan o'rnating va uni muhitingizning xususiyatlariga mos ravishda sozlang.

Modulni muvaffaqiyatli o'rnatgandan so'ng, keling, bu erda joylashgan uning sozlamalariga o'tamiz admin/config/people/ldap

Modul sozlamalari 4 ta yorliqga bo'lingan: Sozlamalar, Serverlar, Foydalanuvchi, Autentifikatsiya, Ruxsat

Birinchi yorliq hisob parollarini shifrlash usulini sozlaydi Active Directory Drupal ichida.

Mening amaliyotimda men buni ishlatmayman, shuning uchun men darhol ikkinchi yorliqga o'taman Serverlar. Va bu erda biz batafsilroq to'xtalamiz.
Yorliqda saytda ishlatiladigan barcha yaratilgan LDAP avtorizatsiya serverlari ko'rsatiladi, sukut bo'yicha bu ro'yxat bo'sh va biz tugmani ishlatishimiz mumkin. LDAP server konfiguratsiyasini qo'shing yangi server yaratishingiz mumkin.
Server yaratish sahifasi bir nechta bloklarga bo'lingan, ularning har birini ko'rib chiqamiz:

Ulanish sozlamalari

Ushbu server konfiguratsiyasi uchun mashina nomi. - yaratilayotgan serverning haqiqiy mashina nomi. Men odatda qo'ng'iroq qilaman faol_katalog
Ism ** - serverning boshqa nomi, men ham uni chaqiraman faol_katalog
** Yoqilgan
- katakchani belgilang, shu bilan yaratilayotgan server konfiguratsiyasini yoqing
LDAP server turi- mening holimda men tanlayman Active Directory
LDAP serveri- mening holimda Active Directory serveri joylashgan domen nomi yoki IP manzili ad.zv
LDAP porti- Men uni sukut bo'yicha qoldiraman 389 , bizda ham xuddi shunday
Start-TLS dan foydalaning- Men katakchani belgilamayman, chunki ... biz shifrlashdan foydalanmaymiz
LDAP tavsiyalariga rioya qiling- Men ham buni o'rnatmayapman, garchi men bu sozlama nima uchun kerakligini hali to'liq tushunmaganman

Bingind usuli

Qidiruv uchun ulanish usuli (foydalanuvchi ob'ektini yoki ularning guruh a'zolarini topish kabi)
Boshqacha qilib aytganda, savol foydalanuvchining mavjudligini qidirish, uning atributlarini o'qish va hokazolar uchun Active Directory serveriga ulanish kimning nomidan amalga oshiriladi.
Xuddi ma'no tavsifida bo'lgani kabi, men birinchi variantni ishlataman Xizmat hisobini bog'lash eng yaxshi amaliyot sifatida.
Ya'ni, serverga ulanish kataloglarni va Active Directory tuzilishini o'qish huquqiga ega bo'lgan Active Directory-da oldindan yaratilgan maxsus hisob qaydnomasidan amalga oshiriladi.
Quyida ushbu variantni tanlayotganda, maydonlarda xizmat qaydnomangizning login va parolini ko'rsatishingiz kerak Anonim qidiruv uchun DN Va Anonim qidiruv uchun parol

Ma'lumotlar bazasidan mavjud parolni o'chiring. Xizmat hisobini bog‘lashdan o‘tishda buni tekshiring- element yuqorida tavsiflangan usulimizga taalluqli emas, shuning uchun biz katakchani belgilamaymiz.

LDAP foydalanuvchisi Drupal foydalanuvchi aloqasi

LDAP foydalanuvchilari, guruhlari va boshqa yozuvlar uchun asosiy DN-lar- barcha foydalanuvchilar Active Directory-da joylashgan asosiy DN, mening holimda men o'rnatdim DC = reklama, DC = zv. Ushbu sozlamada Active Directory serveringizning tizim ma'murlari bilan maslahatlashganingiz ma'qul
AuthName atributi Va AccountName atributi- foydalanuvchi login va hisob nomi saqlanadigan atribut, odatda ular bir xil bo'lishi kerak va ko'p hollarda u ko'rsatilgan samaccountname, chunki sukut bo'yicha login Active Directoryda joylashgan
Elektron pochta atributi- mening holimda foydalanuvchining pochta qutisi joylashgan atribut pochta. Shuni ta'kidlash kerakki, Drupal uchun bu maydon talab qilinadi, chunki Drupal-da pochta qutisi bo'lmagan foydalanuvchi bo'lishi mumkin emas, shuning uchun agar sizning muhitingizda pochta qutisi bo'lmagan foydalanuvchilar bo'lish ehtimoli mavjud bo'lsa, shablon yordamida pochta qutisini to'ldirish uchun quyidagi maydondan foydalanishingiz kerak yoki keyinroq biz boshqa yorliqda boshqa tomondan, bu sozlamaga qayting.
Elektron pochta shabloni- pochta qutilari shablonlari, masalan, sizning pochta qutilaringiz login bilan bir xil bo'lsa yoki Active Directory-da bir nechta foydalanuvchi atributlaridan iborat bo'lsa ishlatiladi. Shuning uchun, siz uni oddiygina atribut belgilaridan yaratishingiz mumkin.
Eskiz atributi- Drupal-da foydalanuvchi profilining rasmiga keyinchalik yuklash uchun foydalanuvchi tasviri joylashgan atribut (ikkilik formatda), mening holimda eskiz Surat
Doimiy va noyob foydalanuvchi identifikatori atributi- Active Directory foydalanuvchisi uchun hech qachon o'zgarmas noyob atribut. Bu, masalan, sizning loginingiz foydalanuvchining familiyasi va bosh harflari bo'lgan hollarda qo'llaniladi va agar foydalanuvchi to'satdan familiyasini o'zgartirsa va keyin uning logini o'zgartirilgan bo'lsa, u keyingi safar Drupal uchun saytga kirganda, u tomonidan bo'ladi. yangi foydalanuvchi sifatida sukut bo'yicha va Drupal yangi hisob yaratadi (albatta, agar pochta qutisi ham o'zgartirilgan bo'lsa, chunki u o'zgarmasa, Drupal pochta qutisidagi ziddiyat haqida xabar beradi va yangi yozuv yaratmaydi). Shuning uchun bu maydon noyob kalit bo'lib xizmat qiladi, foydalanuvchi saytga kirganida birinchi navbatda ko'rib chiqiladi, hatto u o'z loginini o'zgartirgan bo'lsa ham, Drupal avval ushbu atribut yordamida uni topadi va keyin u Active bilan aloqa o'rnatadi. Katalog foydalanuvchisi va natijada Drupal veb-saytida o'z loginini yangilang. Mening holimda shunday ob'ekt
Doimiy va noyob foydalanuvchi identifikatori atributi ikkilik qiymatga egami? - Men belgi qo'ydim, chunki ob'ekt ikkilik tizimda saqlanadi.

PHP da AD bilan ishlash

Ma'lumotlarni o'qish. 1-qism. AD ​​ga ulanish, ma'lumotlarni so'rash va qayta ishlash

Kontent seriyasi:

AD bilan foydalanuvchi qoʻshish yoki oʻchirish, maʼlumotlar yoki guruh aʼzoligini oʻzgartirish va ayniqsa ommaviy operatsiyalarni bajarish (masalan, boʻlimlar boʻyicha barcha foydalanuvchilar roʻyxatini yaratish) kabi asosiy operatsiyalarni bajarish uchun Visual Basic dasturini oʻrganish mutlaqo shart emas. yoki PowerShell - bu PHP bilimi uchun (shuningdek, kerakli huquqlarga ega foydalanuvchiga ega bo'lish) etarli.

Tez-tez ishlatiladigan qisqartmalar:

  • AD - Active Directory (katalog xizmati);
  • LDAP - katalogga kirishning engil protokoli;
  • DN - taniqli ism.

Iyun oyida nashr etilgan seriyaning birinchi qismlari (, , ) AD server ma'lumotlarini qanday o'qish, unga standart ldapsearch dasturi va Bourne Shell tilida yozilgan skript yordamida oddiy LDAP serveri sifatida kirish haqida gapirdi. Aytish kerakki, Bourne Shell bunday ish uchun unchalik mos emas: hatto ikkita ustundan matn faylini yaratishning juda oddiy operatsiyasi uchun siz juda ahamiyatsiz qadamlarni qo'yishingiz kerak. Shuning uchun uni PHP kabi yuqori darajadagi tilda qayta yozishga harakat qilish tabiiy.

Konfiguratsiya fayli

Skript deyarli bir xil konfiguratsiya faylidan foydalanadi. Uning mazmuni 1-ro'yxatda ko'rsatilgan.

Listing 1. phpldapread.php skripti uchun konfiguratsiya fayli
Ulanish uchun #LDAP server ldap_server=10.54.200.1 #Ulanish uchun asosiy DN ldap_basedn="dc=shelton,dc=int" #Ulanish uchun DN-ni ulash [elektron pochta himoyalangan]#Ulanish nomidan amalga oshiriladigan foydalanuvchi uchun parol ldap_password="cXdlcnR5YXNkZgo 1" #Yozuvni tanlash filtri. Buning ma'nosi: "Hisobni qulflash" xususiyatiga ega bo'lmagan Foydalanuvchi # turidagi ob'ektlarni tanlang ldap_common_filter="(&(!(userAccountControl:1.2.840.113556.1.4.803:=2)) (sAMAccountType=805306368))" # Roʻyxatdagi foydalanuvchilar tizim obʼyektlariga eʼtibor bermang ignore_list="SQLAgentCmdExec,SMSService,SMSServer_001, wsus" #Fayl saqlanadigan katalog etcdir=/tmp #Roʻyxatdagi fayl nomi sarglist=sargusers

Tobeliklar, yordamchi funksiyalar

Skript ishlashi uchun sizga pear-Config va pear-Console_Getopt qo'shimcha komponentlari, shuningdek php-ldap tili kengaytmasi kerak bo'ladi. Pear-Config konfiguratsiya faylini o'qish uchun talab qilinadi, pear-Console_Getopt - buyruq qatori parametrlarini tahlil qilish uchun. Aytish kerakki, butun skript ko'rib chiqilmaydi: konfiguratsiya faylini o'qish, yordamni ko'rsatish yoki buyruq qatorini tahlil qilish kabi masalalar allaqachon yaxshi tasvirlangan, shuning uchun tegishli funktsiyalar skriptning to'liq versiyasi o'tkazib yuboriladi; dan yuklab olish mumkin. Biz faqat ADdan ma'lumotlarni o'qish bilan bevosita bog'liq bo'lgan narsalarni ko'rib chiqamiz, masalan, LDAP serveri va ba'zi nostandart yordamchi funktsiyalar.

Parolning teskari funksiyasi roʻyxat 2da koʻrsatilgan. “Himoya” deb ataladigan narsaning maqsadi tasodifiy oqmalarning (koʻz tomchilari deb ataladi) oldini olish va boshqa hech narsa emas.

Listing 2. Parolni teskari funksiyasi.
/* * Parolni teskari konvertatsiya qilish * @param string $aylantirilgan parol * @qaytariladigan string $passwd parol matn shaklida */ funktsiya demux_passwd($converted) ( $_conved = explode(" ", $converted); $_passwd = "" ; if ($_conved != 0) for (;$_conved != 0; $_conved--) ( $_conved = $_conved . "="; ) $_passwd = base64_decode($_conved) rtrim($_passwd); )

Albatta, bu erda hech qanday qiziq narsa yo'q: oldingi qismlarda aytib o'tilganidek, konfiguratsiya fayli baza 64 ga aylantirilgan parolni saqlaydi, to'ldiruvchilar o'chiriladi va raqam bilan almashtiriladi. Bu funksiya teskari konvertatsiyani amalga oshiradi.

UTF-8 dan KOI8-R ga o'tkazish funksiyasi 3-listda ko'rsatilgan. Ushbu funktsiyaga ehtiyoj FreeBSD-dagi konsol UTF-8 dan foydalanmasligi sababli yuzaga keladi.

Listing 3. Satrni UTF-8 dan KOI8-R ga aylantirish funksiyasi
/* * satrni UTF-8 dan KOI8-R ga aylantirish * @param string $manba satri UTF-8 kodlashda * @return string $dest string KOI8-R kodlashda */ function _from_utf8($source) ( $converted = iconv ("UTF-8", "KOI8-R", $source($converted));

Bundan tashqari, mutlaqo qiziq bo'lmagan safe_logger funktsiyasidan foydalaniladi, uning vazifasi skriptni tugatgan holda yoki to'xtatmasdan xabarlarni jurnalga yoki konsolga chiqarishdir. Bu funksiyalarning barchasi utils.php faylida saqlanadi.

AD ulanishi

AD ga ulanish uchun 4-listda ko'rsatilgan ldap_server_connect funksiyasidan foydalaning. Funksiya barcha ulanish amallarini bajaradi va server bilan ishlash uchun ulanish identifikatorini qaytaradi. Funktsiya alohida ldapquery.php faylida saqlanadi

Listing 4. AD serveriga ulanish funksiyasi
require_once $PATH_LIB."/utils.php"; /* * LDAP serveriga ulanish * @param massivi $_config konfiguratsiya parametrlari massivi * @return resurs $ldapconn LDAP serveriga ulanish identifikatori */ funksiya ldap_server_connect($_config) ( // Parolni matn shaklida oling $ _ldap_pwd = demux_passwd($ _config["root"]["ldap_password"]); // Agar (!$ldapconn = ldap_connect($_config["root"]["ldap_server"])) safe_logger() bo'lsa, serverga ulanish o'rnatiladi. sprintf("LDAP -server %s ga ulanib bo'lmadi", $_config["root"]["ldap_server"]), "DIE" // AD Windows 2003 va undan yuqori versiyalarga ulanish uchun siz ushbu parametrlarni o'rnatishingiz kerak ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3 ldap_set_option ($ldapconn, LDAP_OPT_REFERRALS, 0 // Serverga kiring ldap_bind($ldapconn, $_config["rootbin"][_"ldap);

Bu erda nimaga e'tiboringizni qaratmoqchiman.

Birinchidan, LDAP_OPT_PROTOCOL_VERSION ("protokol versiyasi") va LDAP_OPT_REFERRALS ("yo'naltiruvchi havolalarni o'chirish") mos ravishda 3 va 0 ga o'rnatilishi kerak - ularsiz siz g'alati narsani ko'rishingiz mumkin: serverda avtorizatsiya o'tadi, ammo har qanday qidiruv aniq qaytariladi. nol yozuvlar.

Ikkinchidan, Bind DN to'liq konfiguratsiya faylida bo'lgani kabi va boshqa yo'l bilan o'rnatilishi kerak. To'liq DNni kiritish ham noto'g'ri bo'ladi.

ADdan maʼlumotlarni soʻrash

AD dan ma'lumotlarni so'rash uchun alohida ldap_data_query funksiyasi ishlab chiqilgan. Bu, asosan, ASCII bo'lmagan belgilarni o'z ichiga olgan ma'lumotlar (va ularning aksariyati oddiy ADda) UTF-8 kodlashda saqlanganligi sababli amalga oshirildi. FreeBSD konsoli UTF-8 uchun cheklangan qo'llab-quvvatlashga ega bo'lganligi sababli, ba'zi konvertatsiyalarni amalga oshirish kerak edi.

AD dan ma'lumotlarni tanlash ldap_search funksiyasi tomonidan amalga oshiriladi, u boshqa parametrlar qatorida olinishi kerak bo'lgan atributlarga ega bir o'lchovli massivni oladi. Ammo ushbu atributning qiymatini qayta kodlash kerakligini ko'rsatish uchun funktsiya ikki o'lchovli massivni oladi, unda har bir element o'zi indekslar nomi va qayta kodlangan elementlardan iborat massivdir.

Funksiya kirish sifatida qabul qiladigan atributlar massivining turi 5-ro‘yxatda (qisman) ko‘rsatilgan.

Listing 5. Ma'lumotlar so'rovi funksiyasiga o'tkazilgan parametrlar massivi.
array(2) ( => array(2) ( ["name"]=> string(2) "cn" ["recode"]=> string(4) "true" ) ... )

Haqiqiy ma'lumotlarni so'rash funktsiyasi 6-ro'yxatda ko'rsatilgan.

Listing 6. AD dan ma'lumotlarni so'rash funktsiyasi.
require_once $PATH_LIB."/utils.php"; require_once $PATH_LIB."/ldapconnect.php"; /* * LDAP serveridan maʼlumotlarni soʻrash * @param massivi $_config konfiguratsiya maʼlumotlari bilan massiv * @param resource $ldapconn LDAP serveriga ulanish identifikatori * @param massivi $atribut LDAP soʻrovi uchun atributlar massivi * @return massiv $ldapdata serverdan olingan ma'lumotlar LDAP */ funktsiyasi ldap_data_query($_config, $ldapconn, $attribute) ( $oneadd = array(); $myrecode = array(); $myattrs = array(); // Ma'lumotlarni so'rash uchun , biz bir o'lchovli massiv foreach yaratamiz ($atribut sifatida $oneattr) $myattrs = $oneattr["name"] // Konfiguratsiya faylidan umumiy tanlash filtri yordamida ma'lumotlarni so'rash $result = ldap_search($ldapconn, $_config); ["root"]["ldap_basedn"], $_config ["root"]["ldap_common_filter"], $myattrs); // Barcha tanlangan yozuvlarni o'qing $info = ldap_get_entries($ldapconn, $result); jurnaldagi raqam safe_logger(sprintf("%s serverdan %d yozuvni o'qish", $info["count"], $_config["root"]["ldap_server"]), "" // Yaratish a chiqish ma'lumotlariga ega ikki o'lchovli massiv // Har bir massiv elementi element kaliti atribut nomi, // va ma'lumotlar atribut qiymati bo'lgan massivdir; Agar kerak bo'lsa, qayta kodlanadi ($i = 0; $i< $info["count"]; $i++) { for ($j = 0, $k = count($attribute); $j < $k; $j++) { $myattr = $attribute[$j]["name"]; if (isset($info[$i][$myattr])) { if ($attribute[$j]["recode"] == "true") $myrecode[$myattr] = _from_utf8($info[$i][$myattr]); else $myrecode[$myattr] = $info[$i][$myattr]; } else $myrecode[$myattr] = ""; $oneadd[$i] = $myrecode; } } return $oneadd; }

Ikki o'lchovli parametrlar massividan ldap_search funksiyasi uchun bir o'lchovlisi hosil bo'ladi, keyin ma'lumotlar so'raladi. Ma'lumotlar massiv sifatida qaytariladi, ularning har bir elementi 7-listda ko'rsatilgandek ko'rinadi.

Listing 7. ldap_get_entries funksiyasi tomonidan qaytarilgan ma'lumotlar massivining bir elementi.
=> array(6) ( ["cn"]=> array(2) ( ["count"]=> int(1) => string(13) "Administrator" ) => string(2) "cn" [ "samaccountname"]=> massiv(2) ( ["count"]=> int(1) => string(13) "Administrator" ) => string(14) "samaccountname" ["count"]=> int( 2) ["dn"]=> string(43) "CN=Administrator,CN=Foydalanuvchilar,DC=shelton,DC=net" )

Ko'rib turganingizdek, bu hatto ikki o'lchovli emas, balki uch o'lchovli massivdir. Birinchi darajada - so'ralgan ma'lumotlar, ikkinchisida - bitta ob'ektning atributlari, uchinchisida - har qanday holatda, barcha satr atributlarini o'z ichiga olgan ko'p qatorli atributning satrlari. Bundan tashqari, har bir birinchi darajali elementda ushbu ob'ektning to'liq DN-ni o'z ichiga olgan ikkinchi darajali dn elementi mavjud - bu biz uchun kelajakda juda foydali bo'ladi. Chiqarish massivi ancha sodda bo'lib, bitta element ro'yxat 8da ko'rsatilgan. Bu erda ASCII bo'lmagan ma'lumotlarga ega ob'ekt ataylab ma'lumotlarning qayta kodlanganligini ko'rsatish uchun ishlatiladi.

Listing 8. Chiqish massivi elementi.
=> massiv(2) ( ["cn"]=> string(11) "Faqat foydalanuvchi" ["samaccountname"]=> string(10) "prostouser" )

Nima uchun ushbu funktsiyaning kirish va chiqishlari batafsil muhokama qilinadi? Chunki asosiy skriptning deyarli barcha ishi (bu maqolaning keyingi qismida muhokama qilinadi) uning chaqiruvini tayyorlash va u tomonidan yaratilgan massivni keyinchalik qayta ishlashga qisqartiriladi.

Xulosa

Ushbu maqoladan ko'rinib turibdiki, PHP LDAP serveri bilan ishlashni sezilarli darajada soddalashtiradi, bu sizga ma'lumotlarni vaqtinchalik fayllarda saqlash bilan bog'liq aqlni zaiflashtiradigan tuzilmalardan voz kechishga, ularni xotiradagi massivlarning ancha qulay tasviri bilan almashtirishga imkon beradi. Boshqa kod sahifasiga "tezda" qayta kodlang va skriptni tuzatishni ancha osonlashtiring.

Ushbu bo'limda siz katalog serveridan ma'lumotlarni qanday qidirish va olish, shuningdek, yozuvlarni qo'shish, o'zgartirish va o'chirishni o'rganasiz.

ldap_search()

resurs ldap_search (resurs havolasi_identifikatori, string base_dn, string filtri [, massiv atributlari [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])
Ldap_search() funksiyasi link_identifier tomonidan ko'rsatilgan katalog serverini qidirish uchun kuchli vositani taklif etadi. U LDAP_SCOPE_SUBTREE chuqurligini qidiradi, bu qiymat avval kiritilgan ldap_set_option() funksiyasi orqali o'rnatilishi mumkin. Odatiy bo'lib, bu qiymat cheksiz chuqurlikda yoki base_dn tomonidan belgilangan daraxtning butun doirasi bo'ylab qidirish uchun o'rnatiladi. Relyatsion ma'lumotlar bazasi so'roviga ekvivalent qidiruv filtri filtr parametri orqali uzatiladi. Va nihoyat, atributlar parametri orqali qidiruv natijalarida qaysi atributlar qaytarilishi kerakligini aniq belgilashingiz mumkin. Qolgan to'rtta parametr ixtiyoriydir va shuning uchun kosmos manfaati uchun men ular haqida ko'proq ma'lumot olish uchun buni sizga mashq sifatida qoldiraman. Keling, bir misolni ko'rib chiqaylik:

"; ) ldap_unbind($ad); ?> Natijalarning namunasi quyidagicha: Gilmor, Jeyson (Kolumb) Shoberg, Jon (Kolumb) Streycher, Martin (San-Fransisko) Ueyd, Mett (Orlando)

Bularning aksariyati, ehtimol, atribut qiymatlariga havola qilinadigan g'alati usulni hisobga olmaganda, oddiy bo'lishi mumkin. Barcha atribut satrlari oxir-oqibat ko'p o'lchovli massivlar bo'lib, har bir atribut qiymati qator raqami, atribut nomi va atribut massiv indeksi kombinatsiyasi bilan havola qilinadi. Masalan, foydalanuvchi familiyasi uchun atribut nomi bo'lgan "sn" kabi atributlar ham indekslangan massivdir.

ldap_mod_add()

mantiqiy ldap_mod_add (resurs havolasi_id, string dn, massiv yozuvi)
Katalog serveriga yozuvlarni qo'shish ldap_mod_add() funksiyasi orqali amalga oshiriladi. Yangi yozuv yangi qatorni o'z ichiga olishi uchun mo'ljallangan atribut/qiymat xaritalaridan iborat massiv yaratish orqali qo'shiladi. Bu jarayon, ehtimol, eng yaxshi misol bilan tushuntiriladi:

Barcha katalog server vazifalarida bo'lgani kabi, majburiy foydalanuvchi maqsadli ma'lumotlarni qo'shish uchun tegishli ruxsatlarga ega ekanligiga ishonch hosil qiling; aks holda xatolar yuzaga keladi.

ldap_mod_replace()

mantiqiy ldap_mod_replace(resurs havolasi_id, string dn, massiv yozuvi)
Kirish atributlarini o'zgartirish ldap_mod_replace() funksiyasi orqali amalga oshiriladi. U aynan ldap_add() kabi ishlaydi, siz o'zgartirmoqchi bo'lgan yozuvni aniqlashning qo'shimcha bosqichini hisobga olmaganda. Bu juda aniq DN-ga ishora qilish orqali amalga oshiriladi. ldap_add() kabi, ham tegishli havola identifikatori, ham quyidagilardan iborat massiv. siz yangilamoqchi bo'lgan yozuvlar taqdim etilishi kerak. Quyida foydalanuvchining telefon raqami qanday o'zgartirilishini ko'rsatadigan misol keltiriladi, xususan, juda aniq DNga e'tibor bering (mening maxsus yozuvimni ko'rsatib).

Barcha katalog server vazifalarida bo'lgani kabi, majburiy foydalanuvchi maqsadli ma'lumotlarni o'zgartirish uchun tegishli ruxsatlarga ega ekanligiga ishonch hosil qiling; aks holda, kutilmagan xatolar yuzaga keladi.

ldap_delete()

mantiqiy ldap_delete(resurs havolasi_id, string dn)
PHP LDAP-ning asosiy funktsiyalari haqidagi so'rovimizni yakunlash ldap_delete(). Ushbu funktsiya mavjud yozuvni o'chirish uchun ishlatiladi. Ldap_mod_replace() singari, o'chirishni amalga oshirish uchun juda aniq DN taqdim etilishi kerak. Quyidagi misol Active Directory'dan "Jason Gilmore" foydalanuvchi yozuvini qanday olib tashlashni ko'rsatadi:

Barcha katalog server vazifalarida bo'lgani kabi, majburiy foydalanuvchi maqsadli ma'lumotlarni o'chirish uchun tegishli ruxsatlarga ega ekanligiga ishonch hosil qiling; aks holda, kutilmagan xatolar yuzaga keladi.

Internet orqali Active Directory qidiruvi

Men har doim o'quvchilar o'z ehtiyojlariga moslasha oladigan amaliy misol bilan o'quv qo'llanmasini yakunlashni yaxshi ko'raman. Ushbu qo'llanmada men sizga ism, joylashuv yoki telefon raqami bo'yicha qidirishga qodir qidiruv interfeysini qanday yaratishni ko'rsataman. Siz qilishingiz kerak bo'lgan yagona narsa ulanish o'zgaruvchilari va asosiy DN-ni o'zgartirishdir. Boshlash uchun keling, qidiruv interfeysini yaratamiz, u "search.html" sifatida saqlanadi:

Qidiruv mezonlari:

Filtr:

1-rasmda ushbu qidiruv shakli brauzerda qanday ko'rinishiga misol keltirilgan.

Shakl 1. Active Directory qidiruv formasi

Keyinchalik, biz qidiruvga ta'sir qiluvchi mantiqni yaratishimiz kerak. Bu qisqa kod biti bu erda ko'rsatilgan:

0) (($i=0; $i) uchun<$entries["count"]; $i++) { echo "

Nomi: ".$entries[$i]["displayname"]."
"; echo "Telefon: ".$entries[$i]["telephonenumber"]."
"; echo "E-pochta: ".$entries[$i]["mail"]."

"; ) ) else ( echo "

Hech qanday natija topilmadi!

"; ) ldap_unbind($ad); ?>

Qidiruv interfeysida koʻrsatilgan harakat manzilini oʻzgartirishingiz, uni yuqoridagi skriptdan iborat faylga yoʻnaltirishingiz yoki uni qidiruv interfeysi bilan bir xil faylga toʻplashingiz va bajarishni boshlash uchun isset() va if shartli dan foydalanishingiz mumkin. qidiruvni yuborish tugmasi bosilganda. Albatta, siz bunday skriptni o'rnatishdan oldin ma'lumotlarni tekshirish uchun qo'shimcha mezonlarni qo'shishni xohlaysiz. 2-rasmda qidiruv natijalarining namunasi keltirilgan.

Shakl 2. Qidiruv natijalari

Xulosa

PHP uzoq vaqtdan beri veb-ilovalarni ishlab chiqishda mening asosiy tilim bo'lib kelgan bo'lsa-da, men Perlni dasturchimning asboblar to'plamining ajralmas qismi deb topdim. Katalog serverlari bilan ishlashda bu his-tuyg'ular boshqacha emas. Shuning uchun, keyingi maqola Perl/LDAP asoslariga bag'ishlangan. Ushbu maqolada bo'lgani kabi, barcha misollar Microsoft-ning Active Directory-ga xosdir, garchi siz ularni istalgan katalog serveri ilovasida osongina qo'llashingiz mumkin. Biz ushbu maqolani statik keshlangan faylni qanday yaratishni ko'rsatadigan misol bilan yakunlaymiz. Perl skripti va CRON (yoki Windows Task Scheduler) yordamida veb-ga asoslangan foydalanuvchi kataloglari.

Savol va mulohazalarni kutib qolaman! Menga elektron pochta xabarini yuboring [elektron pochta himoyalangan]. Shuningdek, Microsoft va Open Source texnologiyalarini integratsiyalashgan tajribalaringiz haqida ko'proq eshitishni xohlayman!

Muallif haqida

U. Jeyson Gilmor (http://www.wjgilmore.com/) Fisher biznes kolleji uchun Internet-ilovalar ishlab chiqaruvchisi. U 2004 yilda Apress tomonidan chop etilgan PHP 5 va MySQL: Novice to Pro kitobining muallifi. Uning ishi hisoblash sanoatining ko'plab yetakchi nashrlarida, jumladan Linux Magazine, O'Reillynet, Devshed, Zend.com va Webreview, shuningdek, PHP 4.0 ga dasturchining kirishi (453pp., Apress) muallifi. Hamkasbi Jon Shoberg bilan birga u Linux jurnalida har oy chop etiladigan "Ochiqda" ruknining hammuallifi.

IT yechimlari ishlab chiqaruvchisi BIZNESINGIZNI OLGGA OLISH UCHUN ENG IT RESURSLARI

Agar xatolikni sezsangiz, matn qismini tanlang va Ctrl+Enter tugmalarini bosing
ULOSING: