Comment stocker en toute sécurité les détails de la chaîne de connexion dans VBA
J'ai un Modèle Excel qui a codé en dur de Ms Access MDB chemin dans le code VBA utilisé pour se connecter à l'Accès des tables et de les enregistrer, récupérer des données.
J'ai migré le MS Accès Base de données sur SQL Server avec l'Authentification Intégrée au Modèle Excel Utilisateurs.
Ma question est, qu'est-Ce que le Recommander Voie /la Meilleure Pratique pour le rangement de la DB SQL Server chaîne de connexion et récupération dans Excel 2007 VBA pour enregistrer et récupérer des données?
Dans le passé, j'ai effectué les opérations suivantes.
- Utiliser un paramètre de Clé de Registre qui a la Chaîne de Connexion. Puis dans le VBA, écrire une fonction qui lit la clé de registre et renvoie la chaîne de connexion.
- Ont un "Paramètres" cachés feuille dans le Modèle Excel, avec cellule nommée pour la chaîne de connexion. Lire la chaîne de connexion dans VBA par l'accès à cette plage nommée.
- Utiliser un .INI fichier txt qui va avec le modèle Excel. (Ce n'est pas l'idéal et je veux éviter ce qu'il construit une dépendance sur fichier externe)
Je n'aime pas # 1 parce que je veux éviter d'écriture/lecture à partir de la base de Registre si possible.
# 2 se sent ok, pensé que je ne suis pas sûr si il est plus "propre" façon de faire cela.
Toutes les pensées?
source d'informationauteur Shiva
Vous devez vous connecter pour publier un commentaire.
C'est ce que je ferais de stocker en toute sécurité de la chaîne de connexion des informations d'identification
Télécharger et installer Visual Studio Express 2012 pour Windows (FREE)
De l'ouvrir en tant qu'Administrateur et de créer un Nouveau Projet. Sélectionnez
Visual C#
puisClass Library
et le renommer enHiddenConnectionString
Dans le l'Explorateur de solutionsrenommer
Class1.cs
àMyServer.cs
Droit de la souris sur votre
MyConnection
projet dans le l'Explorateur de solutions et sélectionnezAdd Reference
Type
activeX
dans la zone de recherche et sélectionnez laMicrosoft ActiveX Data Objects 6.1 Library
De copier et de coller le code ci-dessous dans le
MyServer.cs
remplacer la totalité de ce qui est dans le fichier.Recherchez le
cnStr
variable dans le code et mise à jour votre chaîne de connexion de détails.Droite, cliquez sur le
*HiddenConnectionString
* solution dans le l'Explorateur de solutions et sélectionnez Propriétés.Cliquez sur le
Application
onglet sur le côté gauche, puisAssembly Info
et les tiquesMake Assembly COM-Visible
Cliquez sur le
*Build*
dans le menu sur la gauche et cochezRegister For COM Interop
Remarque: Si vous êtes en développement pour la version 64 bits d'Office alors assurez-vous de changer la
Platform Target
sur le Construire menu àx64
! Ceci est obligatoire pour les 64 bits d'Office COM bibliothèques afin d'éviter toute ActiveX erreurs liées au.Droite, cliquez sur le
HiddenConnectionString
dans le l'Explorateur de solutions et sélectionnezBuild
à partir du menu.Si tout est OK alors votre
HiddenConnectionString.dll
etHiddenConnectionString.tlb
doit être généré. Aller sur ce chemin maintenantet vous devriez voir vos fichiers.
Maintenant ouvrez Excel et aller à VBE. Cliquez sur
Tools
et sélectionnezReferences
.Cliquez sur le Parcourir bouton et accédez à la
HiddenConnectionString.tlb
.Aussi, ajouter des références à
Microsoft ActiveX Object 6.1 Library
- c'est donc vous pouvez utiliser la bibliothèque ADODB.Maintenant, cliquez-droit n'importe où dans le de l'Explorateur de Projet fenêtre et Insérer une nouvelle
Module
de copier et de coller le code ci-dessous à
Remplacer le
[TABLE_NAME]
avec un nom de table dans votre base de données.Appuyez sur F5 ou frapper le vert jouer bouton dans le ruban.
Si tout est OK, vous devriez maintenant voir la Table retournée sur votre feuille de calcul.
mon exemple:
Comme vous pouvez le voir. L'ajout de références à votre propre COM-bibliothèque et de stocker les identifiants de connexion et d'autres données sensibles à l'intérieur de l'compilé
.dll
protège vos données(chaîne de connexion). Il est très difficile de décompiler le*.dll
fichier pour obtenir des informations sensées. Il existe différents codage techniques pour protéger votre*.dll
encore plus, mais je ne vais pas entrer dans les détails maintenant. Cela se réalise ce que vous avez demandé.myCn.GetConnection
renvoie laADODB.Connection
objet qui a été initialisé à l'intérieur référencés de la bibliothèque COM. Aucun utilisateur d'Excel sera présenté avec la chaîne de connexion ou à des données sensibles (en fait, personne d'autre non plus).Vous pouvez modifier le code C# pour accepter les paramètres à partir de VBA c'est à dire le login, le mot de passe initial catalog, requête à exécuter, etc... si vous avez des utilisateurs avec des droits différents sur l'instance de SQL Server, il ne serait pas une mauvaise idée de permettre aux gens de se connecter.
Remarque: il n'y a pas d'erreur de manipulation ajouté dans le code C# et VBA. Je ne saurais trop recommander de travail sur elle si vous avez l'intention d'utiliser la technique que j'ai décrit ci-dessus.
Comment sur le stockage sous
CustomDocumentProperties
?Note: je ne suis pas sûr, si le classeur (basé sur un modèle donné) va hériter de la propriété est définie à l'aide de
CustomDocumentProperties
dans le modèle.