2014-11-04 3 views
4

Я использую Windows 7 и Access 2010. Я пытаюсь подключиться к нашему серверу, чтобы видеть файлы. Моя проблема в том, что я не хочу иметь имя пользователя или пароль в коде. Я бы хотел, чтобы окна запрашивали его, если требуется проверка подлинности (из моих тестов, как только вы аутентифицируете, вам не нужно повторно делать это некоторое время). От MapNetworkDrive Object MSDN, strUser и strPassword являются необязательными и используют текущие учетные данные пользователей, но это, похоже, не работает для сервера.VBA MapNetworkDrive на сервер с учетными данными Windows

Dim objFSO As Object 
Dim objFolder As Object 
Dim objNetwork As Object 
Dim strShareLetter As String 
Dim strURL As String, strUser as String, strPassword as String 
strShareLetter = "L:" 


Set objFSO = CreateObject("Scripting.FileSystemObject") 
strURL = "\\[email protected]\DavWWWRoot\companydav\nodes\12345678\" 

Set objNetwork = CreateObject("WScript.Network") 
objNetwork.MapNetworkDrive strShareLetter, strURL, False, strUser, strPassword 

Set objFolder = objFSO.GetFolder(strURL) 

MsgBox objFolder.Files.Count 
MsgBox objFolder.SubFolders.Count 

Set objFolder = Nothing 
Set objFSO = Nothing 

objNetwork.RemoveNetworkDrive (strShareLetter) 
Set objNetwork = Nothing 

Если я напишу свой пароль/пароль в коде, все будет работать. Но мне нужно, чтобы другие пользователи могли его использовать, и я не хочу, чтобы мои учетные данные использовались повсюду. Мне бы хотелось, чтобы подсказки учетных данных Windows или что-то в этом роде. Я не хочу запрашивать пароль пользователя через vba по соображениям безопасности.

Любые идеи? Я искал Google для решений, но я не могу найти его. thank you

+1

Какие соображения безопасности вас беспокоят? Данные не будут храниться вне срока службы метода, если вы предложите пользователю. Кажется, это достаточно простое решение. – RubberDuck

+0

Многие пользователи будут использовать приложение и иметь доступ к коду с помощью alt + F11, поскольку здесь ничего не защищено. Кто-то, кто немного знает в vba, может просто сохранить пользователя/пароль в текстовом файле на сервере или сделать что-то в этом роде. (Например, секретарь мог получить пароль bigboss). С моей стороны, мне просто не нравится, когда пароли вводятся как строка в любом месте. – trixrabbit

+0

Я думаю, что беспокойство немного ... В лучшем случае. Пользователь будет иметь доступ только к собственному имени пользователя и паролю, но если вас это беспокоит, просто защитите паролем проект VBA. – RubberDuck

ответ

1

Похоже, вы уже признали, что вам нужна какая-то пользовательская форма в вашем проекте для сбора учетных данных пользователя.

Вот как я это сделаю. Я бы ввел User-Form из редактора VBA. Оттуда я хватаю пару текстовых полей и ярлыков, назовите одно поле «Идентификатор пользователя», а другое - «Пароль». Для текстового поля пароля я обязательно вставлю «*» в свойство PasswordChar, чтобы скрыть пароль. Я также добавил бы кнопку, которая говорит «Отправить» или «Войти» или что-то в этом роде.

После того, как вы сделали это, вам понадобится несколько свойств:

Private pUserId As String 
Private pPassword As String 

Public Property Let UserId(value as string) 
    pUserId = value 
End Property 

Public Property Get UserId() as string 
    UserId = pUserId 
End Property 

Public Property Let Password(value as string) 
    pPassword = value 
End Property 

Public Property Get Password() As String 
    Password = pPassword 
End Property 

Затем вы хотите использовать свой журнал в событии нажатия кнопки, чтобы загрузить информацию из текстовых полей в свойства и скрыть форму.

Private Sub CommandButton1_Click() 
    UserId = TextBox1.text 
    Password = TextBox2.text 
    Me.hide 
End Sub 

Тогда все, что вам нужно сделать, это тусклый и отображение пользовательской формы для пользователя.

... 
Set objNetwork = CreateObject("WScript.Network") 
Dim LogInForm As UserForm1 
Set LogInForm = New UserForm1 
LogInForm.Show vbModal 
objNetwork.MapNetworkDrive strShareLetter, strURL, False, LogInForm.UserId, LogInForm.Password 
... 

И это в значительной степени. Вам может потребоваться узнать, как создавать пользовательские формы в VBA или расчесывать их.

Смежные вопросы