VBA-Projekt ist nicht geschützt genug - jeder mit 2 Stunden Freizeit und Internet kann wahrscheinlich durchlaufen.
In einem Basisszenario werden verschiedene Benutzer auf DB-Ebene mit unterschiedlichen Berechtigungen eingerichtet. Bitten Sie dann Ihre Benutzer in der Excel-Tabelle, das Kennwort und den Benutzernamen in einer der Zellen oder über das Benutzerformular anzugeben. Nimm das Passwort und den Benutzernamen und verwende es in der Verbindungszeichenfolge.
Als weiteren Schritt zur Sicherheit können Sie einen kleinen Trick verwenden, den ich salting
anrufen. Z.B. Nehmen wir an, Ihr Passwort für einen bestimmten Benutzer lautet vityata
. Dann bitten Sie den Benutzer, es einzugeben. Nehmen Sie bei der Eingabe das Passwort und ändern Sie es in etwas anderes. Dies sollte das Passwort für die Datenbank sein. Ich meine, so etwas wie dieses:
Public Function str_generator(ByVal str_value As String, ByVal b_fix As Boolean) As String
Dim l_counter As Long
Dim l_number As Long
Dim str_char As String
On Error GoTo str_generator_Error
If b_fix Then
str_value = Left(str_value, Len(str_value) - 1)
str_value = Right(str_value, Len(str_value) - 1)
End If
For l_counter = 1 To Len(str_value)
str_char = Mid(str_value, l_counter, 1)
If b_is_odd(l_counter) Then
l_number = Asc(str_char) + IIf(b_fix, -2, 2)
Else
l_number = Asc(str_char) + IIf(b_fix, -3, 3)
End If
str_generator = str_generator + Chr(l_number)
Next l_counter
If Not b_fix Then
str_generator = Chr(l_number) & str_generator & Chr(l_number)
End If
On Error GoTo 0
Exit Function
str_generator_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure str_generator of Function Modul1"
End Function
Private Function b_is_odd(l_number As Long) As Boolean
b_is_odd = l_number Mod 2
End Function
Lassen Sie uns sagen, dass das Benutzerkennwort vityata
ist. Dann, nachdem der Benutzer es eingegeben hat, wird es zu cxlv|cwcc
geändert, das das echte Kennwort für die Datenbank ist.
?str_generator("vityata",false)
cxlv|cwcc
?str_generator("cxlv|cwcc",true)
vityata
Last but not least - das ist, wie meine Klassen-Verbindung aussieht - https://github.com/Vitosh/VBA_personal/blob/6750f76e85540829056e7889c489a65daf85c696/cls_Connection.vb. Wenn Sie Ideen für Verbesserungen haben, würde ich mich freuen, eine Pull-Anfrage zu sehen.
Haben Sie darüber nachgedacht, mit dem DBA für eine Anmeldung zu sprechen, die nur Zugriff auf die Daten bietet, die die Benutzer trotzdem sehen? Sie haben eine Sicht in der Datenbank und ein Konto, das nur auf die Daten in dieser Sicht zugreifen kann. –
Können Sie die Sicherheit basierend auf der Rechner-/Benutzer-ID in SQL Server einschränken? –
@RobinMackenzie das Konto, das ich bereits verwende, ist schreibgeschützt, aber ich möchte nicht, dass jemand die Anmeldedaten sieht. –