מה זה: Active Directory Services Interface (ADSI)?
ADSI זה אוסף של אובייקטי COM המספקים שיטות להתממשק עם שרותים במחשב.
אחד השימושים הנפוצים של ADSI הנו התממשקות ל Active Directories.
הנושא של ADSI הוא גדול ורחב וגם 5 מאמרים לא יספיקו לתאר אותו, במאמר הזה אני אתן לכם אפשרות ראשונית להבנת ה ADSI.
מהם שירותי ספריות? (directory services)
שירותי ספריות מתעסקים בדברים כמו:
איזה מדפסות מותקנות ברשת.
או מהם הם הדומיינים של המחשבים ברשת.
מהם ספריות אקטיביות ? (Active Directories)
ספריות אקטיביות תוכננו ב 3 רמות של הפשטה.
- עצים Trees-
- יערות - Forests
- תחומים- Domains
יער הנו אוסף של עצים (ידוע :-))
יערות ועצים משתפות מערכת יחסים אמינה ביניהם.
עצים הנם אוסף של תחומים.
עצים ותחומים מחלקים ביניהם סכמות משותפות.
תחומים נשברים לתוך אחד או יותר יחידות ארגוניות לוגיות שהנן ישויות לניהול עצמי.
כלומר
ישויות בתוך ספריות אקטיביות
¨ 0 - Organization
¨ DC- Domain Component
¨ C- Country Name
¨ OC- Organizational Unit
¨ ST-State
¨ CN - Common Name
¨ L - Locality
עץ מפורמט בצורה נכונה יראה בצורה הבאה:
CN=Nicholas LaDieu, OU=Sales, OU=Sales Division, O=nodei
ספריה אקטיבית בדרך כלל מנסה להציג ממשק משותף לאינפורמציה אודות הרשת, מתוך מערכות שאינן דומות.
ADSI מאפשר להוסיף תכונות לעצים הללו כדי לאסוף אינפורמציה נוספת.
אז אייך אני משתמש ב ADSI
הדוגמא הבאה מציגה כיצד לפנות לאובייקט הדומיין או המחשב בעזרת ADSI
למי שמתעצל לכתוב כל הזמן Response.write
Function w(x)
Response.Write(x)
End Function
Function br()
Response.Write (" ")
End Function
אובייקט ה ADSI חי במערכת כל הזמן, לכן כאשר פונים אליו, בניגוד לאובייקטי ACTIVEX אותם אנחנו צריכים קודם כל לייצר ע"י CreateObject, אנו פונים אליו ע"י GetObject.
בקריאה הזאת אנחנו מבקשים לבדוק את הדומיין MyDomain
Set Tree=GetObject("WINNT:// MyDomain ")
ומציגים את התכונות של הדומיין
w "Domain Name= " & Tree.Name & br
w "Class = " & Tree.Class & br
w "Parent = " & Tree.Parent & br
אם אריץ את הקוד הבא על הדומיין NGS-CORP.COM אקבל את התוצאה הבאה:
Domain Name= NGS-CORP.COM
Class = Domain
Parent = WinNT
אם הייתי מריץ את זה על איזה שם כל שהוא של מחשב בדומיין
Domain Name= Comp
Class = Computer
Parent = WinNT://WORKGROUP
בוא נסתכל על הסכמות:
Set Scheme=GetObject(Tree.Schema)
w "< hr >"
אם האובייקט שייצרנו הנו מסוג Container אז התכונה Containment אוחזת בתוכה רשימה של סוגי אובייקטי ADSI שהאובייקט המסויים הזה (במקרה שלנו ה WinNT ) יכול להכיל.
השם של הסכמה ישתנה, אם נפנה לדומיין עצמו נקבל DOMAIN כשם הסכמה, אם נפנה למחשב נקבל Computer כשם.
If oScheme.Container Then
w oScheme.Name & br
For Each member In Scheme.Containment
w " " & member & br
Next
end if
% >
במקרה שהאובייקט הוא דומיין הקריאה הקודמת תחזיר לנו:
Domain
Computer
User
Group
במקרה שהאובייקט הוא מחשב:
Computer
User
Group
Service
FileService
PrintQueue
לכל אחת מהתכונות הללו אפשר להכנס בעזרת ADSI ולעשות בהן כעולה על רוחכם.
בעיקרון אתם יכולים להשתמש ב ADSI בכל מיני סוגי פעיליות כגון ייצירת ספריות וירטואליות, שליטה על מדפסות, ניהול משתמשים וסיסמאות ב NT’ ועוד ועוד.
דוגמא למציאת פרטים על המשתמש שנכנס לאתר מתוך ה NT בעזרת ADSI.
כדי למצוא את הפרטים הדף צריך להיות במצב של Windows Authentication או Basic Authentication
מתוך ה ServerVariables ("LOGON_USER")) ניקח את שם המשתמש שנכנס לדף
sFullUser = trim(Request.ServerVariables ("LOGON_USER"))
בדרך כלל השם מגיע בצורה הבאה serverName\userName
נפריד בין שם השרת לשם המשתמש
iPos = InStr(sFullUser, "\")
sDomain = Left(sFullUser, iPos - 1)
Logon_user = Mid(sFullUser, iPos + 1)
נשלח בקשה ל NT להביא את המשתמש
Set objUser = GetObject("WinNT://" & sDomain & "/" & Logon_user)
w objUser & br
בשדה description נמצא מה אנשי ה NT כתבו על המשתמש המסוים
UserId = objUser.description
w UserId= & br
דוגמא להחלפת סיסמא למשתמש בעזרת ADSI
On Error Resume Next
Set oUser = GetObject("WinNT://machinename/username")
oUser.ChangePassword "oldpassword", "newpassword"
oUser.SetInfo
Set oUser = Nothing
If (err.number < > 0) Then
' Failed
Else
'Success
End if
דוגמא להקמת ספריה וירטואלית ב IIS בעזרת ADSI
תחילה יש ליצור ספריה פיזית בעזרת FSO
set fso = createobject("Scripting.filesystemobject")
fso.createfolder("\\myserver\wwwroot\myDir")
הקמת הספרייה הוירטואלית ע"י שימוש באובייקט ה IIS
set objIIS = GetObject("IIS://myserver/W3SVC/1/Root")
set objVirtualDir = objIIS.Create("IISWebVirtualDir","myDir")
'the physical name can be different from the virtual name:
objVirtualDir.Put "Path", objIIS.Path & "\myDir_physical"
objVirtualDir.SetInfo
objVirtualDir.AccessScript = true
objVirtualDir.AppCreate true
הוספת משתמש ל window 2000
Dim usr, passwd, fname
usr = Request.Form("txtUsername")
passwd = Request.Form("txtPassword")
fname = Request.Form("txtFullName")
Const strDomain="RPTSERVER"
SaveUser usr,passwd,fname
sub SaveUser(UID, PWD, FULLNAME)
Dim strUser, oDomain, oGroup, oUser, oUserInfo
strUser = lcase(UID)
Set oDomain = GetObject("WinNT://" & strDomain)
Set oUser = oDomain.Create ("user", strUser)
oUser.setinfo
set oUserInfo = getobject("WinNT://" & strDomain & "/" & strUser & ",user")
call oUserInfo.setpassword(lcase(PWD))
oUserInfo.fullname = FULLNAME
oUserInfo.setinfo
Set oDomain=Nothing
Set oUser=Nothing
Set oUserInfo = nothing
end sub
קביעת תאריך פקיעת סיסמא של משתמש ב NT בעזרת ADSI
Set oUser = GetObject("WinNT://machinename/username")
oUser.Put "PasswordExpired", CLng(1)
oUser.SetInfo
ועוד, ועוד ועוד.
ADSI הוא מאד מסובך, אני ממליץ לרכוש ספר מיוחד על ADSI או למצוא ספר ASP שמרחיב את נושא ה ADSI בתוכו.
מאמרים נוספים בנושא:
Active Directory Overview
Secure Your Applications With Active Directory
בהצלחה
|