ব্যবহারকারী কোনও গ্রুপের সদস্য হলে পরীক্ষার জন্য কীভাবে এলডিএপি কোয়েরি লিখবেন?


129

আমি একটি এলডিএপি ক্যোয়ারী লিখতে চাই যাতে এটি পরীক্ষা করে যে কোনও ব্যবহারকারী (এসএএমসিএকাউন্টনাম) কোনও নির্দিষ্ট গ্রুপের সদস্য কিনা। আমি কি 0 বা 1 ফলাফলের রেকর্ড পেয়েছি তাই এটি করা সম্ভব?

আমি অনুমান করি যে আমি ব্যবহারকারীর জন্য সমস্ত গোষ্ঠী পেতে পারি এবং একটি ম্যাচের জন্য প্রত্যেককে পরীক্ষা করতে পারি তবে আমি ভাবছিলাম যে আমি এটি একটি এলডিএপি এক্সপ্রেশনে প্যাক করতে পারি কিনা।

কোন ধারনা?

ধন্যবাদ


উত্তর:


177

আপনি এখানে এই ফিল্টারটি দিয়ে একটি ক্যোয়ারী তৈরি করতে সক্ষম হবেন:

(&(objectClass=user)(sAMAccountName=yourUserName)
  (memberof=CN=YourGroup,OU=Users,DC=YourDomain,DC=com))

এবং যখন আপনি এটি আপনার এলডিএপি সার্ভারের বিপরীতে চালান, আপনি যদি কোনও ফলাফল পান, আপনার ব্যবহারকারী "yourUserName" প্রকৃতপক্ষে "CN = আপনার গ্রুপ, OU = ব্যবহারকারী, ডিসি = আপনারডোমাইন, ডিসি = কম

চেষ্টা করুন এবং দেখুন এটি কাজ করে কিনা!

আপনি যদি সি # / ভিবি. নেট এবং সিস্টেম.ডাইরেক্টরি সার্ভিস ব্যবহার করেন তবে এই স্নিপেটটি কৌশলটি করা উচিত:

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://dc=yourcompany,dc=com");

DirectorySearcher srch = new DirectorySearcher(rootEntry);
srch.SearchScope = SearchScope.Subtree;

srch.Filter = "(&(objectClass=user)(sAMAccountName=yourusername)(memberOf=CN=yourgroup,OU=yourOU,DC=yourcompany,DC=com))";

SearchResultCollection res = srch.FindAll();

if(res == null || res.Count <= 0) {
    Console.WriteLine("This user is *NOT* member of that group");
} else {
    Console.WriteLine("This user is INDEED a member of that group");
}

সাবধানতার কথা: এটি কেবলমাত্র তাত্ক্ষণিক গোষ্ঠী সদস্যতার জন্য পরীক্ষা করবে এবং এটি আপনার ডোমেনে "প্রাথমিক গোষ্ঠী" (সাধারণত "সিএন = ব্যবহারকারী") হিসাবে সদস্যতার জন্য পরীক্ষা করবে না। এটি নেস্টেড সদস্যপদগুলি পরিচালনা করে না, যেমন ব্যবহারকারী এ গ্রুপ এ এর ​​সদস্য যা গ্রুপ বি এর সদস্য - এই সত্য যে ব্যবহারকারী এ সত্যই গ্রুপ বি এর সদস্য এবং এখানে প্রতিফলিত হয় না।

আঙ্গুরের ছিরড়া


1
চেষ্টা করেছি, কিন্তু এখনও আমার পক্ষে কাজ করছে না। এটি সদস্যের কথায় 'OU = ব্যবহারকারী' বা 'OU = গোষ্ঠী' হওয়া উচিত?
পল

3
এটি আমার জিজ্ঞাসা: (& (অবজেক্টক্লাস = ব্যক্তি) (এসএএমএকউন্ট অ্যাকাউন্ট) = ইউএসআইডিআইডি) (সদস্যফ = 'সিএন = এসপিএসএডমিনস, ওইউ = গ্রুপস, ওইউ = মাইটওয়ান, ওইউ = জার্মানি, ওইউ = মাইকম্পেনি, ডিসি = মাইটওয়ান, ডিসি = মাইকম্পানি, ডিসি = com ')) ডিএন সত্যই দীর্ঘ। আমি যে এটি একমত কর্তব্য কাজ করতে। সাহায্য করার জন্যে ধন্যবাদ!
পল

3
এক ঝাঁকুনিতে আমি সদস্যের পরে একক উদ্ধৃতি সরিয়েছি এবং আমি এখন একটি ফলাফল পেয়েছি! ধন্যবাদ
পাউল

2
ভাল উত্তর. তবে এটি চিহ্নিত করা উচিত যে এটি কেবলমাত্র এলডিএপি সার্ভারগুলিতে কাজ করবে যা একটি 'মেম্বারফ' বৈশিষ্ট্য বজায় রাখে। আরও সাধারণ কৌশলটি হ'ল গ্রুপ অবজেক্টটি আনতে হবে এবং গ্রুপের অবজেক্টটি কী স্কিমার ব্যবহার করে তার উপর নির্ভর করে ব্যবহারকারীর ডিএন-এর জন্য তার অনন্য মেম্বার, রোলঅকআপ্যান্ট ইত্যাদি বৈশিষ্ট্যগুলি পরীক্ষা করে।
মারকুইস

1
@ গনস্লিংগার এলডিএপি বৈশিষ্ট্যযুক্ত নাম এবং মানগুলি কেস-সংবেদনশীল নয়, এবং কোনওটিই ডিএন নয়, তবে AD এর নিজস্ব নিয়ম রয়েছে ...
মারকুইস

35

আপনি যদি লিনাক্স সার্ভারগুলিতে প্রচলিত ওপেনএলডিএপি (অর্থাত্‍ স্ল্যাপড) ব্যবহার করছেন, তবে আপনাকে অবশ্যই সদস্যফর্মের ওভারলেটিকে (সদস্যঅফ = এক্সএক্সএক্স) অ্যাট্রিবিউট ব্যবহার করে ফিল্টারের সাথে ম্যাচ করতে সক্ষম করতে হবে।

এছাড়াও, একবার আপনি ওভারলেটি সক্ষম করার পরে এটি বিদ্যমান গোষ্ঠীগুলির জন্য সদস্যপদ সম্পর্কিত বৈশিষ্ট্যগুলি আপডেট করে না (আপনাকে বিদ্যমান গ্রুপগুলি মুছতে হবে এবং সেগুলিতে আবার যুক্ত করতে হবে)। আপনি যদি ওভারলেটি শুরু করতে সক্ষম করে থাকেন, যখন ডাটাবেস খালি ছিল তখন আপনার ঠিক আছে।


8
এমন পৃষ্ঠার একটি লিঙ্ক যা ব্যাখ্যা করে যে কীভাবে সদস্যকে ওভারলে সক্ষম করতে হবে তা আমার ধারণা।
গোখন শাড়ি

5
টিউটোরিয়াল যা আমার পক্ষে কাজ করেছে: schenkels.nl/2013/03/… @ টেলফোর্ড টেন্ড্রি, দোস্ত আপনি পূর্ব-বিদ্যমান গোষ্ঠীগুলি সম্পর্কে এই বিজ্ঞপ্তি দিয়ে আমার জীবন বাঁচালেন। অনেক ধন্যবাদ!
asukaszBachman

21

আমি মার্কের উত্তরে আরও একটি বিষয় যুক্ত করব: মেম্বার অফ অ্যাট্রিবিউটে ওয়াইল্ডকার্ড থাকতে পারে না, সুতরাং আপনি "সদস্যফ = সিএন = এসপিএস *" এর মতো কিছু বলতে পারবেন না এবং এটি "এসপিএস" দিয়ে শুরু হওয়া সমস্ত গোষ্ঠীগুলি খুঁজে পাওয়ার আশা করছেন।


ওই তথ্যের জন্য ধন্যবাদ। আমি যা করতে চাইছি তা করার চেষ্টা করছি। আমি কীভাবে পিএইচপি দিয়ে এটি করতে পারি? অন্যভাবেও কি একই ফলাফল পাওয়া সম্ভব? সমস্ত গ্রুপ এসপিএস দিয়ে শুরু করে এবং তারপরে যাই হোক না কেন ... আমি সর্বদা সবকিছু দখল করতে পারি এবং আমার অ্যারে লুপ করতে পারি তারপরে সিএন এর সাথে ম্যাচটি প্রিগ করতে চাই তবে আমি যদি সম্ভব হয় তবে এটি সরাসরি অনুসন্ধান করতে পছন্দ করি।
ওডিলিবলটা

15

আপনাকে অবশ্যই আপনার প্রশ্নের ক্যোয়ারী বেসরকারী প্রশ্নের ডিএন-তে সেট করতে হবে, তারপরে আপনার ফিল্টারটি সেই গোষ্ঠীর ডিএন-তে সেট করুন যা আপনি ভাবছেন যে তারা যদি কোনও সদস্য হয়। Jdoe অফিস গোষ্ঠীর সদস্য কিনা তা দেখতে আপনার জিজ্ঞাসাটি এরকম কিছু দেখবে:

ldapsearch -x -D "ldap_user" -w "user_passwd" -b "cn=jdoe,dc=example,dc=local" -h ldap_host '(memberof=cn=officegroup,dc=example,dc=local)'

তিনি যদি সমস্ত গ্রুপের সদস্য হন তা যদি আপনি দেখতে চান তবে কেবল আপনার অনুসন্ধানে কেবল 'মেম্বারফ' বৈশিষ্ট্যটির জন্য অনুরোধ করুন:

ldapsearch -x -D "ldap_user" -w "user_passwd" -b "cn=jdoe,dc=example,dc=local" -h ldap_host **memberof**
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.