• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Excel VBA kullanarak Active Directory Kimlik Doğrulama

Katılım
7 Mart 2009
Mesajlar
2
Excel Vers. ve Dili
Excel 2010 (14)
Merhabalar

Hazırlamakta olduğum bir excel dosyası için açılışta şirketin domain server ından yani active directory den kimlik doğrulaması (Active Directory Authentication) yapmasını istiyorum.
Bir çok sitede araştırdım fakat çok anlaşılır bir döküman bulamadım, bulduğum bir kod örneğini aşağıda veriyorum. Bu kodu kendime göre yorumlayamadım, yani şirket server adını nereye yazacağım yada başka neler eklemem gerekir bilemedim.
Ayrıca bu kodlar eklediğim herhangi bir excel dosyasında ilk satır da hata veriyor.

Bu konuda yardımlarınızı bekliyorum.

Teşekkürler
İyi çalışmalar

Kod:
Public Function UserInfoAuth(LoginName As String, Pass As String) As String
'PURPOSE: Display information that is available in
'the Active Directory about a given user

'PARAMETER: Login Name for user

'RETURNS: String with selected information about
'user, or empty string if there is no such
'login on the current domain

'REQUIRES: Windows 2000 ADSI, LDAP Provider
'Proper Security Credentials.

'EXAMPLE: msgbox UserInfo("Administrator")

Dim conn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim oRoot As Object
Dim oDomain As Object
Dim sBase As String
Dim sFilter As String
Dim sDomain As String

Dim sAttribs As String
Dim sDepth As String
Dim sQuery As String
Dim sAns As String

Dim user As Object

On Error GoTo ErrHandler:

'Get user Using LDAP/ADO.  There is an easier way
'to bind to a user object using the WinNT provider,
'but this way is a better for educational purposes
Set oRoot = GetObject("LDAP://rootDSE")
'work in the default domain
sDomain = oRoot.Get("defaultNamingContext")

Set oDomain = GetObject("LDAP://" & sDomain)
sBase = "<" & oDomain.ADsPath & ">"
'Only get user name requested
sFilter = "(&(objectCategory=person)(objectClass=user)(sAMaccountname=" _
  & LoginName & "))"
sAttribs = "adsPath"
sDepth = "subTree"

sQuery = sBase & ";" & sFilter & ";" & sAttribs & ";" & sDepth

conn.Open _
  "Data Source=Active Directory Provider;Provider=ADsDSOObject", LoginName, Pass
  
Set rs = conn.Execute(sQuery)

If Not rs.EOF Then
    Set user = GetObject(rs("adsPath"))
    With user
    
    'if the attribute is not stored in AD,
    'an error will occur.  Therefore, this
    'will return data only from populated attributes
    On Error Resume Next
    
    sAns = "First Name: " & .FirstName & vbCrLf
    sAns = sAns & "Last Name " & .LastName & vbCrLf
    sAns = sAns & "Employee ID: " & .EmployeeID & vbCrLf
    sAns = sAns & "Title: " & .Title & vbCrLf
    sAns = sAns & "Division: " & .Division & vbCrLf
    sAns = sAns & "Department: " & .Department & vbCrLf
    sAns = sAns & "Manager: " & .Manager & vbCrLf

    sAns = sAns & "Phone Number: " & .TelephoneNumber & vbCrLf
    sAns = sAns & "Fax Number: " & .FaxNumber & vbCrLf
    
    sAns = sAns & "Email Address: " & .EmailAddress & vbCrLf
    sAns = sAns & "Web Page: " & .HomePage & vbCrLf
    sAns = sAns & "Last Login: " & .LastLogin & vbCrLf
    sAns = sAns & "Last Logoff: " & .LastLogoff & vbCrLf
    
    sAns = sAns & "Account Expiration Date: " _
         & .AccountExpirationDate & vbCrLf
    
    'IN RC2, this returned 1/1/1970 when password
    'never expires option is set
    sAns = sAns & "Password Expiration Date: " _
      & .PasswordExpirationDate
       
    End With
End If
UserInfoAuth = sAns
Exit Function
ErrHandler:

On Error Resume Next
If Not rs Is Nothing Then
    If rs.State <> 0 Then rs.Close
    Set rs = Nothing
End If

If Not conn Is Nothing Then
    If conn.State <> 0 Then conn.Close
    Set conn = Nothing
End If

Set oRoot = Nothing
Set oDomain = Nothing
End Function

Kod:
Public Sub CommandButton1_Click()
Dim varConnection
Dim varSQL
Dim oQt As QueryTable
Dim user As String
Dim password As String

'Opens a "Login" userform which asks for a username and password
UserForm1.Show

'these variables get used later when creating a ODBC connection
user = UserForm1.txt_user.Value
password = UserForm1.txt_password.Value

If Len(UserInfoAuth(UserForm1.txt_user.Value, UserForm1.txt_password.Value)) > 0 Then

MsgBox ("Did work")

'.... yapılmasını istediğiniz kodları buraya ekleyiniz.

Else

MsgBox ("Didn't work")

Unload UserForm1

End If

End Sub
 
Geri
Üst