Le projet VBA est non protégé assez - toute personne avec 2 heures de temps libre et Internet peut probablement passer.
Quel est le scénario de base est de rendre différents utilisateurs au niveau de la base de données avec des autorisations différentes. Ensuite, demandez à vos utilisateurs sur la feuille de calcul Excel de donner le mot de passe et le nom d'utilisateur dans l'une des cellules ou via le formulaire utilisateur. Prenez le mot de passe et le nom d'utilisateur et utilisez-le dans la chaîne de connexion. Comme une étape supplémentaire à la sécurité, vous pouvez utiliser un petit tour, que j'appelle salting
. Par exemple. Disons que votre mot de passe pour un utilisateur donné est vityata
. Ensuite, demandez à l'utilisateur de l'entrer. En entrant, prenez le mot de passe et changez-le en quelque chose d'autre. Ce quelque chose d'autre devrait être le mot de passe de la base de données. Je veux dire quelque chose comme ceci:
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
Disons que le mot de passe de l'utilisateur est vityata
. Ensuite, après que l'utilisateur l'a entré, il est changé en cxlv|cwcc
, qui est le vrai mot de passe pour la base de données.
?str_generator("vityata",false)
cxlv|cwcc
?str_generator("cxlv|cwcc",true)
vityata
Last but not least - voilà comment ma connexion classe ressemble - https://github.com/Vitosh/VBA_personal/blob/6750f76e85540829056e7889c489a65daf85c696/cls_Connection.vb. Si vous avez des idées d'amélioration, je serais heureux de voir une demande d'extraction.
Avez-vous pensé à parler à l'administrateur de base de données pour une connexion qui donne uniquement accès aux données que les utilisateurs verront quand même? Vous avez une vue dans la base de données et un compte qui peut uniquement accéder aux données dans cette vue .... –
Pouvez-vous limiter la sécurité en fonction de l'ID machine/utilisateur dans SQL Server? –
@RobinMackenzie Le compte que j'utilise déjà est en lecture seule, mais je ne veux pas que quiconque voit les détails de connexion. –