none
שאילתא מ-SQL ל- AD LDS RRS feed

  • שאלה

  • היי.

    אני שואל פה שאלה ששאלתי בפורום SQL, אבל אולי התשובה אליה תגיע מהפורום הזה.

    אנחנו עובדים בתוכנה שלנו עם LDS, שבמילה אחת זה active directory "רזה", שלא תלוי בארגון בו מותקנת התוכנה אלא הוא רכיב שאנחנו כספק שולטים בו.

    ביותר מילים זה : Active Directory Lightweight Directory Services, ובהרבה יותר מילים זה: http://msdn.microsoft.com/en-us/library/aa705886(v=vs.85).aspx

    אני רוצה לעשות שאילתא שתביא לי נתונים מאותו LDS. הדרך, בדומה לעבודה מול active directory, זה להגדיר linked server, ודרכו לבצע שאילתות.

    הגדרתי, נסיתי לשאול שאילתא, קבלתי ERRORS, תיקנתי, קבלתי עוד ERRORS, תיקנתי, עד שבשלב מסוים נתקעתי. אני אביא את תקציר ההשתלשלות ואת המקום בו נתקעתי.

     

    exec sp_addlinkedserver  

      @server = 'adsi_test', -- linked server name

      @srvproduct = 'LDS',  

      @provider ='ADSDSOObject',-- provider name

      @datasrc = ''  

    go

    exec sp_addlinkedsrvlogin

      @rmtsrvname = 'adsi_test', -- linked server

      @useself = false,

      @locallogin = 'sa', -- sqlUser

      @rmtuser = 'domain\master_user', -- domainName\userName

      @rmtpassword = 'password' -- domain User Password

    go

    והשאילתא:

     

    select  *  

    from  openquery(adsi_test, '  

    select  userPrincipalName

    from    ''LDAP://CN=aaa,CN=OuTree,DC=aaa1,DC=aaa2''  

    where   objectCategory = ''Person'' and objectClass = ''user''  

    ') 

    הודעת שגיאה:

    An error occurred while preparing the query ... for execution against OLE DB provider ADSDSOObject for linked server

    תיקון: הוספת שם השרת (של ה-LDS) לשאילתא:

     

    select  *  

    from  openquery(adsi_test, '  

    select  userPrincipalName

    from    ''LDAP://SERVERNAME/CN=aaa,CN=OuTree,DC=aaa1,DC=aaa2''  

    where   objectCategory = ''Person'' and objectClass = ''user''  

    ') 

    הודעת שגיאה:

     

    The OLE DB provider "ADSDSOObject" for linked server "adsi_test" reported an error. The provider indicates that the user did not have the permission to perform the operation.

    2 דברים שעשיתי: עברתי לעבוד על השרת עצמו (אגב, שרת ה-SQL שונה מהשרת שעליו ה-LDS),
    וגם הסרתי את הגדרת ה-linkedsrvlogin:
    EXEC master.dbo.sp_droplinkedsrvlogin @rmtsrvname = N'adsi_test', @locallogin = N'sa'
    GO
    ומאז אני עם הודעת השגיאה הזו:
    Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server "adsi_test".
    ופה נתקעתי.
    חשוב לציין שאותה השאילתא מול ה-active directory מחזירה תשובות.
    מה מצאתי בכל זאת?
    יש מצב שזה קשור לאיזושהי הגבלה בכמות הרשומות שחוזרות, משהו כמו פרמטר שנקרא MaxPageSize. למרות שבהרבה מקומות נשזע שאם זו התקלה אז הייתי אמור לקבל רק את המקסימום שורות ולא את כמות השורות האמיתית, אבל אני לא בטוח.
    כדי להתמודד עם זה, ניסיתי לקחת בשאילתא רק מספר קטן של שורות, ואפילו רק אחד: .....select top 1 * from  openquery - אבל זה לא עזר - אותה שגיאה.
    אולי אלו יגידו משהו למישהו:
    הערת אגב:
    את הודעת השגיאה של:
    The OLE DB provider "ADSDSOObject" for linked server "adsi_test" reported an error. The provider did not give any information about the error.
    קבלתי גם, אבל המשמעות שלה היא שטעיתי בשמות עמודות בשאילתא, ואת זה פתרתי (שם העמודה שהשתמשתי פה,userPrincipalName, הוא כבר נכון).
    עוד דברים:
    נעזרתי בהגדרות בכמה לינקים טובים:
    ניסיתי לפרט כמה שיותר, מקווה שהצלחתי להעביר ולהמחיש את הבעיה.
    תודה מראש,
    איתי.

    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 07 ספטמבר 2011 06:54

תשובות

  • בסוף הסתדרתי!

    הגדרתי מחדש את ה-linkedsrvlogin שהסרתי (עם אותו משפט שהגדרתי למעלה), והתחלתי לקבל תוצאות מהשאילתא!

    לפי מה שאני מבין, ההודעה של:

    Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server "adsi_test".

    קשורה כנראה ל-DATA לא תקין, שמחזיר ערך שגורם לשגיאה.

    אני אעבוד על זה עוד קצת ואעלה לפה סיכום מסודר.


    itaigitt, http://copypastenet.blogspot.com
    • נערך על-ידי itaigitt יום חמישי 08 ספטמבר 2011 09:02
    • סומן כתשובה על-ידי itaigitt יום ראשון 11 ספטמבר 2011 06:55
    יום חמישי 08 ספטמבר 2011 09:01

כל התגובות

  • היי.

    עדכון: הגעתי למצב שאני לא מקבל שגיאה, אבל גם לא מקבל נתונים.....

    הנה מה שעשיתי:

     

    -- 1. remove 'CN=Fox,'

    select *  

    from  openquery(adsi_test, '  

    select  userPrincipalName

    from    ''LDAP://DEV-win2008R2/CN=OuTree,DC=Fox,DC=Bks''  

    where   objectCategory = ''Person''  

            and  

            objectClass = ''user''  

    ')

    -- no errors, but no rows......

     

    -- 2. remove the WHERE:

    select *  

    from  openquery(adsi_test, '  

    select  userPrincipalName

    from    ''LDAP://DEV-win2008R2/CN=OuTree,DC=Fox,DC=Bks''  

    ')

    -- return one row with NULL.....

     

    -- 3. run query in kind of 'LDS language':

    select * FROM OPENQUERY(foxlds, '<LDAP://dev-win2008r2/cn=outree,dc=fox,dc=bks>;(&(name=*));name;subtree

    ')

    -- return one row with NULL.....

    זאת התקדמות מסויימת, אבל עוד לא הגעתי ליעד.....

    ההימור שלי זה שעכשיו אני צריך ללמוד לדבר בשפה של ה-LDS, ואולי בשביל זה הפורום הזה הוא המתאים.... יש מצב????

    תודה!


    itaigitt, http://copypastenet.blogspot.com
    יום רביעי 07 ספטמבר 2011 07:53
  • שלום רב,

     

    וודא שיש לך הרשאות מתאימות, וכי אתה פונה בהתאם להנחיות ב:

     

    http://bartdesmet.net/blogs/bart/archive/2010/07/12/getting-started-with-active-directory-lightweight-directory-services.aspx

     

    http://www.pawlowski.cz/2011/04/querying-active-directory-sql-server-t-sql/

     

    http://www.kodyaz.com/articles/active-directory-services-queries-using-openquery.aspx

     

    בהצלחה


    בברכה, יובל סיני, יועץ טכנולוגיות, אתר אינטרנט: http://www.ben-shushan.net Blog: http://blogs.microsoft.co.il/blogs/yuval14/
    יום רביעי 07 ספטמבר 2011 19:18
  • בסוף הסתדרתי!

    הגדרתי מחדש את ה-linkedsrvlogin שהסרתי (עם אותו משפט שהגדרתי למעלה), והתחלתי לקבל תוצאות מהשאילתא!

    לפי מה שאני מבין, ההודעה של:

    Cannot fetch a row from OLE DB provider "ADSDSOObject" for linked server "adsi_test".

    קשורה כנראה ל-DATA לא תקין, שמחזיר ערך שגורם לשגיאה.

    אני אעבוד על זה עוד קצת ואעלה לפה סיכום מסודר.


    itaigitt, http://copypastenet.blogspot.com
    • נערך על-ידי itaigitt יום חמישי 08 ספטמבר 2011 09:02
    • סומן כתשובה על-ידי itaigitt יום ראשון 11 ספטמבר 2011 06:55
    יום חמישי 08 ספטמבר 2011 09:01