الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

How Can I Connect Active Directory Ldap To Oracle 10g

Featured Replies

بتاريخ:

how can i connect active directory LDAP to oracle 10g

  • بعد 1 شهر...
بتاريخ:
how can i connect active directory LDAP to oracle 10g

السلام عليكم

أرجو من اصحاب الخبرة الرد على استفسار الاخ للإفادة الجاعية
وأرجو من الاخ السائل إ>ا كان لديه معرفة بالربط بين الاوراكل والAD على version قديمة أن يوفر لي مثال على الطريقة
لأني احتاج مع كل هملية إضافة ليوزر جديد على AD أن يتم بشكل اوتوماتيكي عمل update معين على جداول في أوراكل

ولكم جزيل الشكر
بتاريخ:
how can i connect active directory LDAP to oracle 10g

ألا يوجد إجابة :D :lol: :lol:
بتاريخ:

اخى العزيز
هذا الموضوع مهم جدا لكل الديفيلوبرز المتعاملين مع اوراكل داتابيز ويريدون انشاء Single sign on لكل مستخدم باستخدام LDAP Authentication
وللاجابه على استفسارك كيف يتم
يجب اولا ان نقوم بتنشيط وتفعيل الباكاج DBMS_LDAP

SQL> @$ORACLE_HOME/rdbms/admin/catldap.sql



ثم علينا ان نقوم بعمليه authentication اى التاكد من ان هذا المتسخدم موجود بالفعل كيوزر مسجل على LDAP الخاص بلاكتيف ديركتوري بالشركه

l_session := DBMS_LDAP.init(hostname => l_ldap_host,
                           portnum  => l_ldap_port);

l_retval := DBMS_LDAP.simple_bind_s(ld     => l_session,
                                   dn     => l_ldap_user,
                                   passwd => l_ldap_passwd);



ثم علينا ان نقوم بعمليه البحث داخل الديركتوري الخاص ب LDAP للحصول على كل المعلومات الخاصه بالمستخدم

l_attrs(1) := '*'; -- retrieve all attributes 
l_retval := DBMS_LDAP.search_s(ld       => l_session, 
                              base     => l_ldap_base, 
                              scope    => DBMS_LDAP.SCOPE_SUBTREE,
                              filter   => 'objectclass=*',
                              attrs    => l_attrs,
                              attronly => 0,
                              res      => l_message);



ثم نقوم بعمليه البحث داخل LDAP باستخدام بعض البيانات التى سنقوم بادخالها لتتم عمليه البحث بالشكل الصحيح

Base : وهى نقطه البدايه للبحث l_ldap_base
Scope : وهى مدى عمق البحث DBMS_LDAP.SCOPE_SUBTREE
Attrs : اى الخصائص المراد البحث عنها

IF DBMS_LDAP.count_entries(ld => l_session, msg => l_message) > 0 THEN
 -- Get all the entries returned by our search.
 l_entry := DBMS_LDAP.first_entry(ld  => l_session,
                                  msg => l_message);

 << entry_loop >>
 WHILE l_entry IS NOT NULL LOOP
   ...
   ...
   l_entry := DBMS_LDAP.next_entry(ld  => l_session,
                                   msg => l_entry);
 END LOOP entry_loop;
END IF;



ثم نقوم البحث عن الخصائص Atrtrs الخاصه بكل Entry

l_attr_name := DBMS_LDAP.first_attribute(ld        => l_session,
                                        ldapentry => l_entry,
                                        ber_elem  => l_ber_element);
<< attributes_loop >>
WHILE l_attr_name IS NOT NULL LOOP
 ...
 ...
 l_attr_name := DBMS_LDAP.next_attribute(ld        => l_session,
                                         ldapentry => l_entry,
                                         ber_elem  => l_ber_element);
END LOOP attibutes_loop;



واخيرا نسترجع كامل النتائج الخاصه بكل Atributes او قيمه كل خاصيه من الخصائص تلك

FOR i IN l_vals.FIRST .. l_vals.LAST LOOP
 DBMS_OUTPUT.PUT_LINE('ATTIBUTE_NAME: ' || l_attr_name || ' = ' || SUBSTR(l_vals(i),1,200));
END LOOP values_loop;



وفى النهايه نقوم بتجميع كامل اجزاء الكود لنحصل فى النهايه على بروسيدر كامل للبحث داخل سيرفر LDAP والحصول على كامل خصائص كل مستخدم


SET SERVEROUTPUT ON SIZE 1000000

create or replace procedure ldap_Authentication 
as begin DECLARE
 -- Adjust as necessary.
 l_ldap_host    VARCHAR2(256) := 'server01.drclick.com';
 l_ldap_port    VARCHAR2(256) := '389';
 l_ldap_user    VARCHAR2(256) := 'cn=orcladmin';
 l_ldap_passwd  VARCHAR2(256) := 'password';
 l_ldap_base    VARCHAR2(256) := 'cn=Users,dc=drclick,dc=com';

 l_retval       PLS_INTEGER; 
 l_session      DBMS_LDAP.session;
 l_attrs        DBMS_LDAP.string_collection;
 l_message      DBMS_LDAP.message;
 l_entry        DBMS_LDAP.message;
 l_attr_name    VARCHAR2(256);
 l_ber_element  DBMS_LDAP.ber_element;
 l_vals         DBMS_LDAP.string_collection;
 
BEGIN -- Choose to raise exceptions.
 DBMS_LDAP.USE_EXCEPTION := TRUE;

 -- Connect to the LDAP server.
 l_session := DBMS_LDAP.init(hostname => l_ldap_host,
                             portnum  => l_ldap_port);

 l_retval := DBMS_LDAP.simple_bind_s(ld     => l_session,
                                     dn     => l_ldap_user,
                                     passwd => l_ldap_passwd);

 -- Get all attributes
 l_attrs(1) := '*'; -- retrieve all attributes 
 l_retval := DBMS_LDAP.search_s(ld       => l_session, 
                                base     => l_ldap_base, 
                                scope    => DBMS_LDAP.SCOPE_SUBTREE,
                                filter   => 'objectclass=*',
                                attrs    => l_attrs,
                                attronly => 0,
                                res      => l_message);

 IF DBMS_LDAP.count_entries(ld => l_session, msg => l_message) > 0 THEN
   -- Get all the entries returned by our search.
   l_entry := DBMS_LDAP.first_entry(ld  => l_session,
                                    msg => l_message);

   << entry_loop >>
   WHILE l_entry IS NOT NULL LOOP
     -- Get all the attributes for this entry.
     DBMS_OUTPUT.PUT_LINE('---------------------------------------');
     l_attr_name := DBMS_LDAP.first_attribute(ld        => l_session,
                                              ldapentry => l_entry,
                                              ber_elem  => l_ber_element);
     << attributes_loop >>
     WHILE l_attr_name IS NOT NULL LOOP
       -- Get all the values for this attribute.
       l_vals := DBMS_LDAP.get_values (ld        => l_session,
                                       ldapentry => l_entry,
                                       attr      => l_attr_name);
       << values_loop >>
       FOR i IN l_vals.FIRST .. l_vals.LAST LOOP
         DBMS_OUTPUT.PUT_LINE('ATTIBUTE_NAME: ' || l_attr_name || ' = ' || SUBSTR(l_vals(i),1,200));
       END LOOP values_loop;
       l_attr_name := DBMS_LDAP.next_attribute(ld        => l_session,
                                               ldapentry => l_entry,
                                               ber_elem  => l_ber_element);
     END LOOP attibutes_loop;
     l_entry := DBMS_LDAP.next_entry(ld  => l_session,
                                     msg => l_entry);
   END LOOP entry_loop;
 END IF;

 -- Disconnect from the LDAP server.
 l_retval := DBMS_LDAP.unbind_s(ld => l_session);
 DBMS_OUTPUT.PUT_LINE('L_RETVAL: ' || l_retval);
END;
END;



ويجب عليك معرفه LDAP Base اللى هيا Distinguish Name(DN) الخاصه بالمستخدم المراد البحث عن كامل خصائصه ولو مكنتش عارفها اسال Network Admin فى الشركه عندك هو اكيد هيعرفها وهيا بتكون بالشكل التالى

O=GROUP OU=SECOUND ADMINISTRATIVE GROUP CN=RECIPIENTS CN=DrClick

وايضا يمكنك التعديل فى البارامترز

l_ldap_host    VARCHAR2(256) := 'server01.DrClick.com';
 l_ldap_port    VARCHAR2(256) := '389';
 l_ldap_user    VARCHAR2(256) := 'cn=orcladmin';
 l_ldap_passwd  VARCHAR2(256) := 'password';
 l_ldap_base    VARCHAR2(256) := 'cn=Users,dc=DrClick,dc=com';


ولتنفيذ البروسيدر

SQL> Exec ldap_Authentication

بتاريخ:
how can i connect active directory LDAP to oracle 10g

بارك الله فيك أخي الكريم على الإجابة الجميلة والمفصلة، ولكن لقلة خبرتي بالموضوع فإني سأقوم بتجربة الprocedure لفهم كل جزئية فيه.

ولكن اود الإستفسار عن بعض الامور للتاكد منها:

1_حسبما فهمت ان DBMS_LDAP في build_in package موجودة وما علي إلا القيام بتفعيلها من خلال الامر الدي دكرته لكي أتمكن من استخدامها ، هل ما فهمته صحيح؟ وهل عملية التفعيل تكون من أي يوزر، ام من system user ؟ وهل يجب ان تعطى صلاحية للمستخدم من الsystem لاستخدامها؟

2_ سأقوم بأخد الpresedure كما هو وتطبيقه ولن اغير فيه إلا القيم الابتدائية للباراميترز التي دكرت ان بإمكاني التعديل عليها وانفد البروسيجر ، ولكن سأكون شاكرا لك ادا زودتني بتعريف لكل واحد من الباراميترز لكي أعرف من أسأل وكيف أحدد القيمة الابتدائية لكل منها.

3_ هل هدا الprocedure يقوم بالاستعلام عن البيانات المتعلقة بمستخدم معين معرف على الactive directory ؟

أنا اعرف أن استفساراتي كثير ولكن ه>ه المرة الأولى التي استخدم فيها build in pkg ....والموضوع كله جديد علي لدلك ارجو ان تتحمل اسئلتي ...

وجزاك الله خيرا على استجابتك

اخوكم
oramallouh
بتاريخ:
1_حسبما فهمت ان DBMS_LDAP في build_in package موجودة وما علي إلا القيام بتفعيلها من خلال الامر الدي دكرته لكي أتمكن من استخدامها ، هل ما فهمته صحيح؟ وهل عملية التفعيل تكون من أي يوزر، ام من system user ؟ وهل يجب ان تعطى صلاحية للمستخدم من الsystem لاستخدامها؟


لمنع حدوث اى مشكله خاصه بصلاحيات المستخدم ..قم بتفعيل البروسيدر من خلال مستخدم له صلاحيه SYSDBA فيمكنك الدخول عن طريق المستخدم SYS
افضل
2_ سأقوم بأخد الpresedure كما هو وتطبيقه ولن اغير فيه إلا القيم الابتدائية للباراميترز التي دكرت ان بإمكاني التعديل عليها وانفد البروسيجر ، ولكن سأكون شاكرا لك ادا زودتني بتعريف لكل واحد من الباراميترز لكي أعرف من أسأل وكيف أحدد القيمة الابتدائية لكل منها.

l_ldap_host    VARCHAR2(256) :[color="#000000"]ده الهوست الخاص با active directory server [/color]
 l_ldap_port    VARCHAR2(256) := المنفذ الخاص بسيرفر active directory 
 l_ldap_user    VARCHAR2(256) :=المستخدم المراد الاستعلام عنه 
 l_ldap_passwd  VARCHAR2(256) : كلمه السر الخاصه بالمستخدم 
l_ldap_base    VARCHAR2(256) := 'cn=Users,dc=drclick,dc=com';وده distinguish name


3_ هل هدا الprocedure يقوم بالاستعلام عن البيانات المتعلقة بمستخدم معين معرف على الactive directory ؟


نعم كل ماعليك ان تتاكد ان هذا المستخدم مسجل على الدومين والاكتيف ديركتوري Domain & Active directory user

تحياتى
احمد حمدى
بتاريخ:

السلام عليكم

مشكور اخي الكريم على الرد الجميل والشافي

وأرجو المعدرة بداية على تأخر ردي بسبب مشكلة تحدث معي وهي أني عندما أحاول الدخول للمنتدى يعطيني رسالة اعلى الصفحة أن الخاصية محجوبة ويطلب مني محاولة الدخول مرة أخرى وهكدا أبقى أحاول حتى يتم ارسال الرسالة فلا أدري ما السبب أحيانا محاولتين او ثلاث أنجح بالدخول وأحيانا أبقى لفترة طويلة ولا انجح بالدخول وقد رجعت إلى ملفات المساعدة ولم أستفد منها ...فلا ادري ما هو الحل للمشكلة؟؟؟؟؟!!!!

عموما أرجو هده المرة أن انجح...

بالنسبة للموضوع فإني سأشتفيد منه في عملية الsingli sign on ودلك بالتشييك على صحة بيانات يوزر معين في الactive directory وهدا رائع وجميل جدا

ولك الشكر الجزيل على دلك.


واستكمالا للموضوع اود ان اطرح استفسارا يختص بنفس الموضوع ولكنه من جهة اخرى وهي:

لو أردت ان أقوم بعمل ربط بحيث أي إضافة لمستخدم جديد على الactive directory يقوم مباشرة بالارتباط مع قاعدة بيانات الاوراكل وعمل insert أو update في جدول معين أي ان جهة التفعيل والانطلاق هي الactive directory .
أو العملية العكسية وهي عند إضافة مستخدم معين على جدول في الأوراكل نقوم بالربط من الأوراكل إلى الactive directorty ونعمل إضافة للمستخدم هناك.

أنا اتوقع ان الموضوع مشترك بيننا كأوراكل وبين مسؤول الactive directory ...
لكن ما هو المطلوب مني كأوراكل لكي تتم هده العملية ..

وقد سألت عن الموضوع فأخبرني البعض ان هناك شيء يقوم بالربط ويتم التواصل من خلاله يسمى web service أو web link لا ادري بالضبط

فأرجو إن كان لديك معرفة بالموضوع ان تدلني عليه

وبارك الله فيك

أخوكم
oramallouh

بتاريخ:

اخى العزيز oramallouh


لم اقم بصراحه بتجربه الربط بين الاكتيف ديركتوري والاوراكل داتابيز خلاف طريقه LDAP ولكن دعنى اعطيك ماوصلت اليه من خلال بحثى فى الانترنت عن هذه الطريقه
اولا هناك عرض تقديمى Presentation توضح امكانيه الربط والطريقه بالصوت والصوره واليك الرابط
هنـــــــا

واليك رابط اخر
كتاب Using oracle with Microsoft active directory

وايضا Oracle identity management

اتمنى اكون افدتك
تحياتى

بتاريخ:

اخى العزيز oramallouh


لم اقم بصراحه بتجربه الربط بين الاكتيف ديركتوري والاوراكل داتابيز خلاف طريقه LDAP ولكن دعنى اعطيك ماوصلت اليه من خلال بحثى فى الانترنت عن هذه الطريقه
اولا هناك عرض تقديمى Presentation توضح امكانيه الربط والطريقه بالصوت والصوره واليك الرابط
هنـــــــا

واليك رابط اخر
كتاب Using oracle with Microsoft active directory

وايضا Oracle identity management

اتمنى اكون افدتك
تحياتى



جزاك الله خيرا كثيرا اخي الكريم

مجموعة متميزة من الماضيع التي أراها لأول مرة سأقوم بقراءتها ومحاولة التجربة عل إحداها تنفعني

وفي كل الأحوال أتوقع انها ستكون ذات قيمة كبيرة لي حتى وإن لم تحل مشكلتي التي طرحتها

لك الشكر الجزيل مرة أخرى على المتابعة والتجاوب المتواصل

جعله الله في ميزان أعمالك

أخوكم
oramallouh

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.