25/05/2018, 23:30

BẢO MẬT THÔNG TIN ĐĂNG NHẬP VỚI EXCEL VBA

Trong bài viết này, chúng ta sẽ học cách đưa username và password của người dùng vào VBA macro mà không để lộ các thông tin nhạy cảm trong phạm vi VBA project hoặc trang tính Excel. Ví dụ thực tế Giả dụ rằng John muốn tạo một trang tính được tự động hóa để 2 người đồng nghiệp của anh ấy cũng ...

Trong bài viết này, chúng ta sẽ học cách đưa username và password của người dùng vào VBA macro mà không để lộ các thông tin nhạy cảm trong phạm vi VBA project hoặc trang tính Excel.

Ví dụ thực tế

Giả dụ rằng John muốn tạo một trang tính được tự động hóa để 2 người đồng nghiệp của anh ấy cũng có thể sử dụng để làm việc. Trang tính này sẽ được lưu trữ trong drive của công ty để bất kì ai cũng có thể truy cập khi cần.

Ý tưởng ban đầu của John là tập hợp username và password của anh ấy và các đồng nghiệp lại và mã hóa thông tin này vào trong macro. Do đó không ai trong số họ phải đăng nhập lại mỗi khi cần.

John sử dụng biến Aray để lưu trữ tất cả thông tin đăng nhập vào trong một danh sách tương ứng với số ID trong máy tính cá nhân của họ. Mã VBA sẽ trông như sau:

Sub DatabaseLogin()
‘PURPOSE: Log into Company’s Database via Excel VBADim ID_List As Variant
Dim Username_List As Variant
Dim Passoword_List As Variant
Dim Username As String
Dim Password As String
Dim x As Integer’Team Members’ Credentials
ID_List = Array(“x302918”, “x294832”, “x392490”)
Username_List = Array(“JohnSmith”, “JasonBorne”, “FelixHarp”)
Passoword_List = Array(“ILuvMommy5”, “HulkMan123”, “IneedSleep665”)’Test for Team Memember’s ID
For x = LBound(ID_List) To UBound(ID_List)
If Environ(“USERNAME”) = ID_List(x) Then
Username = Username_List(x)
Password = Username_List(x)
Exit For
End If
Next x

‘Unidentified User, must manually login
If Username = “” Then
Username = Application.InputBox(“Enter Your Username”)
Password = Application.InputBox(“Enter Your Password”)
End If

‘Log Into Database
AccessDatabase Username, Password, “CustomerDatabase”

End Sub

Hy vọng rằng, bên cạnh sự bẽ mặt khi phải share những password bạn tạo khi còn là học sinh thì rõ ràng là cách làm này không được ưa chuộng.

Một cách tốt hơn để bảo mật thông tin đăng nhập với VBA

Có một cách hay hơn để giải quyết vấn đề này là mỗi người sẽ lưu trữ thông tin của mình trong máy tính của họ. Để làm điều này, họ có thể đơn giản tạo một text file trong NotePad ở định dạng CSV (comma separated). Trong file này, mỗi người sẽ gõ username và password của mình (được phân cách bởi dấu phẩy) như dưới đây:

Điều cần thiết là tất cả người dùng phải lưu file với cùng một tên và cùng một vị trí trong máy tính của chính họ. Trong ví dụ này, tên file sẽ là  “Credentials.txt” và nó sẽ được lưu ở trên màn hình desktop.

VBA lấy các thông tin đăng nhập từ Text File

Mã này sẽ chỉ cho bạn cách làm thế nào để lấy thông tin từ một text file với việc định mã VBA.  Bạn sẽ sử dụng quy trình này để lấy thông tin đăng nhập ra khỏi textfile mà bạn đã tạo ở phần trước. Dưới đây là một mã đầy đủ và chúng ta sẽ cùng xem xét từng phần của mã.

Sub DatabaseLogin()
‘PURPOSE: Log into Company’s Database via Excel VBA & Desktop Text FileDim Username As String
Dim Password As String
Dim TextFile As Integer
Dim FilePath As String
Dim Credentials As Variant’File Path of Text File
On Error Resume Next
FilePath = Environ(“USERPROFILE”) & “DesktopCredentials.txt”
On Error GoTo 0’Determine Login creditials (manual or automatic from desktop file)
If FilePath = “” Then
Username = Application.InputBox(“Enter In Your Username”)
Password = Application.InputBox(“Enter In Your Password”)

Else
‘Determine the next file number available for use by the Open function
TextFile = FreeFile

‘Open the text file
Open FilePath For Input As TextFile

‘Store file content inside array variable and determine login info
Credentials = Split(Input(LOF(TextFile), TextFile), “,”)
Username = Credentials(0)
Password = Credentials(1)

‘Close Text File
Close TextFile

End If

‘Log Into Database
AccessDatabase Username, Password, “CustomerDatabase”

End Sub

Giải thích mã VBA

Việc mã VBA này làm đầu tiên là tìm kiếm một text file cụ thể trên desktop. Bạn có thể kéo đường dẫn drive mặc định bằng cách sử dụng hàm Environ. Ví dụ, Environ(“USERPROFILE”) tương đương với C:UsersChris. Sau đó bạn có thể thêm phần đường dẫn folder và file name còn lại vào công thức hàm Environ để tạo thành một đường dẫn hoàn chỉnh tới các máy tính đang chạy. Lỗi sẽ xuất hiện trong dòng mã này nếu người dùng không lưu file vào vị trí cụ thể mà bạn chỉ định ( trong trường hợp này họ sẽ phải tự đăng nhập).

‘File Path of Text File
On Error Resume Next
FilePath = Environ(“USERPROFILE”) & “DesktopCredentials.txt”
On Error GoTo 0

Tếp theo là hàm IF để xác định xem liệu thông tin có được tìm thấy trong máy tính. Nếu bạn phải tự đăng nhập thì sẽ xuất hiện một hộp thoại hỏi người dùng username và password.

‘Determine Login creditials (manual or automatic from desktop file)
If FilePath = “” Then
Username = Application.InputBox(“Enter In Your Username”)
Password = Application.InputBox(“Enter In Your Password”)
Else
‘Credentials were able to be pulled from the text file
End If

Khi mã VBA  tìm thấy text file trong vị trí được chỉ định, nó sẽ mở file lấy thông tin được lưu bên trong. Tiếp theo, hàm Split sẽ phân cách chúng bởi dấu phẩy và chúng sẽ được lưu vào một dãy biến bắt đầu từ vị trí số 0. Nó sẽ trông giống như sau:

Và đây là khi ý tưởng này được mã hóa trong VBA

‘Determine the next file number available for use by the Open function
TextFile = FreeFile’Open the text file
Open FilePath For Input As TextFile’Store file content inside array variable and determine login info
Credentials = Split(Input(LOF(TextFile), TextFile), “,”)
Username = Credentials(0)
Password = Credentials(1)’Close Text File
Close TextFile

Để hoàn thành quy trình đăng nhập, bạn cần biết cách đăng nhập vào database của công ty qua VBA. Cái này thường nằm ở phần tài liệu API củả database . Dưới đây là một vài link ví dụ của các tài liệu kinh doanh phổ biến – chỉ bạn cách kết nối vào Excel với VBA.

0