Directory service

**Directory service** (בתרגום לעברית: **שירותי מדריך** או **שירותי ספרייה**) היא תוכנה המשמשת לאגירה, הפצה וחיפוש של מידע משותף ברשת מחשבים. סוגי המידע העיקריים המנוהלים על ידי התוכנה כוללים משתמשים, כתובת דואר אלקטרוני או מספרי טלפון, תיקיות, קבצים, מדפסות, סיסמאות של משתמשי מחשב, הרשאות, תצורות יישומים מבוזרים, מפתחות ציבוריים ועוד.

Directory service היא למעשה מסד נתונים שרשומה בו יכולה להתייחס לאובייקט כלשהו כגון אדם, מקום, שירות, או מחשב. כדי לסייע בארגון המידע, רוב שירותי הספרייה אוגרים את המידע בצורת עץ היררכי.

דוגמה למערכת Directory נפוצה בסביבת Windows היא ה-Active Directory של חברת Microsoft, המשמשת לשמירת המידע על משתמשים, קבוצות, מחשבים וכדומה.

## היסטוריה
שירותי הספרייה היוו במקור חלק מיוזמת ה-Open Systems Interconnection (או מודל ה-OSI). בשנות ה-80 של המאה שעברה, ארגון ה-ITU וארגון ה-ISO הציגו את פרוטוקול ה-X.500 אשר היווה את הבסיס לכל שירותי הספרייה הקיימים כיום. המטרה הראשונה של הפרוטוקול הייתה שימוש בהעברת הודעות אלקטרוניות בתוך הרשת הארגונית וחיפוש משאבי רשת תוך שימוש בשמות. פרוטוקול ה-LDAP (בראשי תיבות: Lightweigh Directory Access Protocol) מבוסס על הגדרות מבנה הספרייה ב-X.500, אולם משתמש בפרוטוקול TCP/IP ובקידוד מחרוזות תווים, מה שמקשר אותו יותר לעולם האינטרנט.

## תיאור
בתחום הנדסת התוכנה, ספרייה (Directory) דומה מאוד בהגדרתה למילון (Dictionary). היא מאפשרת חיפוש שם (Name) ומידע אודות אותו שם. כשם שלמילה במילון יכולות להיות כמה הגדרות מילוניות, כך בספרייה ניתן לשייך נתונים שונים ורבים לאותה "מילה".

ספריות יכולות להיות קטנות מאוד ולהכיל רק כמות מזערית של נתונים והגדרות נתונים, או גדולות מאוד ולהכיל כמות אין סופית של צומתי נתונים (Data Node) והגדרות נתונים (Data Type). לדוגמה, במאגר של מספרי טלפון, צומתי הנתונים יהיו שמות האנשים בעוד שסוג הנתונים יהיה מספרי הטלפון. דוגמה נוספת היא מערכת ה-DNS, בה צומתי הנתונים הם שמות דומיין (Domain) או כתובות אינטרנט.

בספריות המשמשות מערכות הפעלה של מחשבים, צומתי הנתונים מייצגים משאבים אשר מנוהלים על ידי מערכת ההפעלה, כגון שמות משתמשים, שמות מחשבים, מדפסות ומשאבים משותפים אחרים. מאז המצאת האינטרנט, נעשה שימוש בסוגי ספריות שונות אולם התקן הנפוץ כיום הוא ה-X.500.

שירות הספרייה הפשוט ביותר נקרא שירות שמות (Naming Service) ומטרתו היא למפות שמות של משאבי רשת לכתובות הרשת שלהם. בשימוש בסוג זה של ספרייה, המשתמש לא צריך לזכור את כתובת הרשת המלאה של כל משאב ומשאב ויכול להשתמש בשם קצר כדי לאתר את המשאב.

בדרך כלל מתייחסים לכל משאב ברשת כאובייקט (Object) בספרייה. מידע אודות אותו משאב ספציפי נשמר בצורת מאפיינים (Attributes) של אותו אובייקט. ניתן להגביל את הגישה למידע של אובייקטים על ידי מתן הרשאות (Permissions) לאותו אובייקט.

ספריות מתוחכמות יותר עוצבו כדי שיכילו נתונים נוספים מעבר לאובייקטים כדוגמת שירותים (Services), התקנים (Devices), הגדרת תפקיד (Entitlements), העדפות (Preferences), תוכן (Content) ועוד. את השימוש בספריות מעין אלו ניתן למצוא במערכות אשר מטפלות בתחום ניהול הזהויות (Identity Management).

שירות ספריות מגדיר את מרחב השמות (Namespace) של הרשת. מרחב שמות הוא מעין מכל וירטואלי אשר מחזיק אובייקטים ושומר מידע אודות יחסי הגומלין ביניהם.

תהליך עיצוב ספרייה (Directory) מתבסס בדרך כלל על סדרה של חוקים אשר קובעים כיצד משאבי רשת יקבלו שם וכיצד יזהו אותם. אחד החוקים הבסיסיים ביותר קובע שכל השמות חייבים להיות ייחודיים וחד משמעיים. בפרוטוקולים X.500 ו-LDAP, השם של האובייקט נקרא Distinguished Name או DN בקיצור. ה-DN משמש להצבעה על אוסף מאפיינים אשר ביחד מרכיבים רשומה אחת (שם) בתוך הספרייה.

### שכפול והפצת נתונים
ל"שכפול נתונים" (Replication) ו"הפצת נתונים" (Distribution) יש משמעות מיוחדת בתהליך התכנון והניהול של שירותי הספרייה. המושג "שכפול נתונים" מתאר מצב בו מרחב השמות של ספרייה אחת מועתק (Copy) לשרת ספרייה אחר כדי לעמוד במצבים בהם אחד השרתים מפסיק לעבוד או כדי לשפר ביצועים. תהליך העתקת מרחב השמות מנוהל על ידי אותה סמכות (Authority). "הפצת נתונים" הוא תהליך בו שרתי ספרייה רבים, המחזיקים מרחבי שמות שונים, מאוחדים יחדיו לספרייה אחת כאשר כל מרחב שמות אחראי על סמכויות שונות.

## השוואה בין שירותי ספרייה למסדי נתונים
### הבדלים מבניים
ישנם כמה מאפיינים אשר מבדילים בין שירותי ספרייה למסדי נתונים יחסיים (RDB) רגילים. יש יוצאים מן הכלל, אך באופן כללי ניתן למצוא את ההבדלים הבאים:
* המידע בתוך ספרייה נקרא יותר פעמים מאשר שכותבים אותו, דבר אשר הופך סוגיות כגון תנועות (Transactions) ואחזור נתונים (Rollback) לפחות חשובות.
* ניתן לשכפל את המידע אם זה עוזר לשיפור הביצועים.
* מאחר שעיצוב מודל הנתונים בצורה היררכית יכול להיות מסובך ועלות העיבוד שלו יקרה, שירותי ספרייה מסוימים יחפשו אובייקטים תוך שימוש במאפיינים שלהם ואז יציגו את הנתונים לפי דרישה.
* שירותי ספריות רגילים לא תומכים ביחסי רבים-לרבים (Many-to-Many) ולכן הם משתמשים ב- או מזהים אחרים. הדבר דומה לשימוש במפתח זר (Foreign Key) במסדי נתונים יחסיים.
* סכמות (Schemas) שונות. ספריות מכילות **מחלקות של אובייקטים** (Object Class), מאפיינים ומרחבי שמות, כאשר הגדרת ה-objectClass מכילה את המאפיינים הבאים:
*# **חובה** (Must) – המאפיין חייב להופיע תמיד בכל ההופעות של ה-objectClass.
*# **אפשרי** (May) – מאפיין אשר ניתן להגדיר אותו אולם גם ניתן לתת לו ערך ריק (Null) בדומה למאגרי מידע רציונליים.
* מאפיינים יכולים להכיל כמה ערכים (Multi Valued), דבר המאפשר שימוש שונה. לדוגמה, מאפיין יכול להכיל שם מחשב ואת מספרו הסידורי ברמה אחת של עץ הנתונים ורשימת מספרי טלפונים ברמה אחרת.
* השימוש במאפיינים וב-objectClasses מוסדר על ידי שימוש במספרים חד-חד ערכיים המסופקים על ידי ארגון ה-IANA העולמי. לכן, חברות המפתחות אפליקציות המבוססות על מודל הספרייה, ישאפו להשתמש במאפיינים שכבר הוגדרו כדי לחסוך עלויות.
* מאפיינים מקושרים למרחבי שמות. כלומר כל objectClass יורש את המאפיינים של ה-objectClass מעליו (ולבסוף את המאפיינים של ה-objectClass מהרמה העליונה ביותר, מה שמוסיף מאפיינים נוספים).
* שירותי ספרייה רבים נמצאים בשימוש בתכנון אבטחת המידע בארגונים גדולים ולכן יש להם זיקה רבה למאפיינים חשובים כגון שליטה בגישה למידע (Access Control).

### הבדלי שימוש

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

השימוש בשירות ספרייה (Directory Services) יתבצע בארגונים המכילים משאבי רשת רבים שצריך לנהל אותם וזאת במטרה לחסוך עלויות וליעל את העבודה. בין הדוגמאות למשאבי רשת מסוג זה ניתן למצוא חשבונות משתמש, פנקסי כתובות, רשימות כוח אדם, הגדרות, תפקידים, מוצרים ושירותים, התקנים, פרופילים, מדיניות, מספרי טלפון וכדומה.

מסיבות מובנות, תהליך עיצוב הספריות ומאגרי המידע היחסיים שונים מאוד האחד מהשני. מודלים של מסדי נתונים יחסיים נוטים יותר להיות בנויים עבור דרישות החברה ותהליכי העבודה שלה כגון הצגה מותאמת אישית של נתונים, גישה מהירה, והאפשרות לגשת לנתונים בכל מקום ברשת. לעומת זאת, התפקיד של מודל הספרייה הוא לאפשר שימוש תוך הסבר מינימלי וכאן נכנס ההבדל המהותי בקנה המידה. ניתן לראות זאת בכמות המאגרים העצומה אשר בשימוש בשוק למטרות שונות. חברות שרוצות לנהל זהויות בתוך הארגון שלהם ולחשוף שירותים שונים ללקוחות יעדיפו את מבנה הספריות.

## דוגמאות
לאורך השנים פותחו יישומים שונים של שירותי הספרייה מחברות שונות, בהם ניתן למצוא מערכות מפורסמות כגון:
* DNS
* Active Directory של חברת מיקרוסופט
* NetIQ eDirectory של חברת Novell
* Netowrk Information Services (NIS) של חברת סאן מיקרוסיסטמס

## ראו גם
* Active Directory

קטגוריה:מערכת הפעלה
קטגוריה:מסדי נתונים