Mot de Passe BD Access
medbo
Messages postés
551
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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.
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.
A voir également:
- Mot de Passe BD Access
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
- Mot de passe bios perdu - Guide
- Voir mot de passe wifi android - Guide
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
as-tu essayé de supprimer les liens? je pense que cela suffira à faire oublier le mot de passe.
as-tu essayé de supprimer les liens? je pense que cela suffira à faire oublier le mot de passe.
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.
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?
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é.