Mot de Passe BD Access

Fermé
medbo Messages postés 551 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 24 mars 2019 - Modifié le 21 mars 2019 à 21:16
yg_be Messages postés 23230 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 septembre 2024 - 24 mars 2019 à 21:23
Salut tout le monde.

je suis devant le problème suivent :

j'ai une BD Access frontale A qui effectue des liens de tables vers une BD Dorsale B qui est protégée par un mot de passe. J'utilise le code VBA suivant :

Public Function lierToutes()
Dim strMotPasse As String
Dim strCheminBd As String
Dim strConnect As String
Dim strNomsTables() As String
Dim strTemp As String
Dim i As Integer
Dim oDb As DAO.Database
Dim oDbSource As DAO.Database
Dim oTbl As DAO.TableDef
Dim oTblSource As DAO.TableDef
'Définit mot passe, nom table, chemin base de données
strMotPasse = "MOT DE PASSE"
strCheminBd = CurrentProject.Path & "\1.accdb"
'Définit la chaine de connexion permettant la liaison des tables
strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=" & strCheminBd & ""

'Instancie l'objet Database de la base courante
Set oDb = CurrentDb
'Instancie l'objet Database de la base protégée
Set oDbSource = DBEngine.OpenDatabase(strCheminBd, True, True, strConnect)

'Parcours l'ensemble des tables de la base de données protégée
'et stocke leur nom
For Each oTblSource In oDbSource.TableDefs
'ignore les tables system
If (oTblSource.Attributes And dbSystemObject) = 0 Then
strTemp = strTemp & oTblSource.Name & "|"
End If
Next
'Ferme la base de données sources (impératif pour la liaison)
oDbSource.Close: Set oDbSource = Nothing
'parcours le tableau de noms de tables
strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
For i = 0 To UBound(strNomsTables)
'Crée une nouvelle table dans la base de données courante
Set oTbl = oDb.CreateTableDef(strNomsTables(i))
'Lie les deux tables
oTbl.Connect = strConnect
oTbl.SourceTableName = strNomsTables(i)
'Ajoute la table à la base de données
On Error Resume Next
oDb.TableDefs.Append oTbl
Next i
oDb.TableDefs.Refresh
End
Set oTbl = Nothing
Set oDb = Nothing
Set oDbSource = Nothing
Set TablesDefs = Nothing
Set oTblSource = Nothing
End Function


Ma quastion est :

est-il possible de ne pas garder le mot de passe en mémoire ? car je constate que même si je ferme la base de données et je la rouvre le mot de passe de la BD "B" est toujours stocké dans la BD "A" même si je ne réexecute pas le code en question pour établir les liens des tables.

Merci pour vos réponses.

1 réponse

yg_be Messages postés 23230 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 septembre 2024 Ambassadeur 1 538
21 mars 2019 à 23:58
bonjour,
as-tu essayé de supprimer les liens? je pense que cela suffira à faire oublier le mot de passe.
0
medbo Messages postés 551 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 24 mars 2019 29
22 mars 2019 à 00:09
Merci pour votre réponse yg_be. Oui. mais existe t-il une autre façon ?
0
yg_be Messages postés 23230 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 septembre 2024 1 538 > medbo Messages postés 551 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 24 mars 2019
22 mars 2019 à 09:39
peux-tu expliquer ce que tu veux exactement obtenir, ou ce que tu veux éviter? tu voudrais garder les liens, mais qu'ils ne fonctionnent pas?
0
medbo Messages postés 551 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 24 mars 2019 29
22 mars 2019 à 12:20
je veux éviter que le mot de passe ne soit pas gardé en mémoire du fichier A. car si je ferme ce dernier et je le rouvre les liens sont, et qu'une personne mal seine pourrai exploiter cette faille pour effectuer des modifications au niveau des tables du fichier B. Voila, j'espère que c'est claire.

Je voudrai savoir s'il n'existe pas une solution par ODBC mais que les liens se font vers un fichier Access local au lieu d'un serveur SQL, Mysql ou autre.
0
yg_be Messages postés 23230 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 septembre 2024 1 538 > medbo Messages postés 551 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 24 mars 2019
22 mars 2019 à 12:57
tu peux supprimer les liens du fichier A avant de le fermer, mettre un mot de passe sur le fichier 1, supprimer le fichier A après l'avoir fermé, ou encore changer le mot de passe du fichier B.
je ne comprends pas ton raisonnement: même si le mot de passe n'est pas sauvegardé, qu'est-ce qui empêcherait une personne d'exécuter le code VBA, et, ainsi, de profiter du mot de passe?
comment ferais-tu une meilleure protection avec ODBC?
0
medbo Messages postés 551 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 24 mars 2019 29
Modifié le 22 mars 2019 à 14:30
Oui. en effet tout ce que tu dis est juste. mais je cherche une autre solution qui permet de ne pas garder le mot de passe en mémoire comme pour les liens via ODBC comme le fait le code suivant :

DoCmd.TransferDatabase acLink, "Base de données ODBC", strConn, _
acTable, "table_mysql", "table_mysql", , False

FALSE ici permet justement de ne pas sauvegarder le mot de passe en mémoire lorsque le lien vers la table dans le serveur Mysql est efféctué.
0