Esto es lo que haría con seguridad almacenar las credenciales de cadena de conexión
Descargar e instalar Visual Studio Express 2012 for Windows (FREE)
abrirlo como administrador y crear un nuevo proyecto.Seleccionar Visual C#
continuación Class Library
y cambiarle el nombre a HiddenConnectionString
En el Explorador de soluciones , cambiar el nombre de Class1.cs
a MyServer.cs
Haga clic derecho en su proyecto MyConnection
en el Explorador de soluciones y seleccione Add Reference
Tipo activeX
en el cuadro de búsqueda y marque la Microsoft ActiveX Data Objects 6.1 Library
copiar y pegar el siguiente código en el MyServer.cs
reemplazando completamente lo que está en el archivo.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.IO;
using ADODB;
namespace HiddenConnectionString
{
[InterfaceType(ComInterfaceType.InterfaceIsDual),
Guid("2FCEF713-CD2E-4ACB-A9CE-E57E7F51E72E")]
public interface IMyServer
{
Connection GetConnection();
void Shutdown();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("57BBEC44-C6E6-4E14-989A-B6DB7CF6FBEB")]
public class MyServer : IMyServer
{
private Connection cn;
private string cnStr = "Provider=SQLOLEDB; Data Source=SERVER\\INSTANCE; Initial Catalog=default_catalog; User ID=your_username; Password=your_password";
public MyServer()
{
}
public Connection GetConnection()
{
cn = new Connection();
cn.ConnectionString = cnStr;
cn.Open();
return cn;
}
public void Shutdown()
{
cn.Close();
}
}
}
Localizar la variable cnStr
en el código y actualización sus detalles de la conexión de cadena.
Haga clic con el botón secundario en la solución *HiddenConnectionString
* en Solution Explorer y seleccione Propiedades.
Haga clic en la pestaña Application
en el lado izquierdo, a continuación, Assembly Info
y garrapatas Make Assembly COM-Visible
Haga clic en el *Build*
en el menú de la izquierda y de la señal Register For COM Interop
Nota: Si está desarrollando Office de 64 bits, asegúrese de cambiar Platform Target
en el menú Generar en x64
. Esto es obligatorio para las bibliotecas COM de 64 bits para evitar cualquier error relacionado con ActiveX.
haga clic derecho en el HiddenConnectionString
en el Explorador de soluciones y seleccione Build
en el menú.
Si todo fue bien, entonces su HiddenConnectionString.dll
y HiddenConnectionString.tlb
deben generarse correctamente.Vaya a esta ruta ahora
C:\Users\administrator\Documents\Visual Studio 2012\Projects\HiddenConnectionString\HiddenConnectionString\bin\Debug
y debería ver sus archivos.
Ahora abra Excel y vaya a VBE. Haga clic en Tools
y seleccione References
.
Haga clic en el botón Navegar y navegue hasta el HiddenConnectionString.tlb
.
Además, agregue referencias a Microsoft ActiveX Object 6.1 Library
- esto es para que pueda usar la biblioteca ADODB.
Ahora haga clic derecho en cualquier parte del ventana Explorador de proyectos y Insert un nuevo Module
copiar y pegar el siguiente código para que
Option Explicit
Sub Main()
Dim myCn As MyServer
Set myCn = New MyServer
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "Select * from [TABLE_NAME]", myCn.GetConnection
Range("A1").CopyFromRecordset rs
rs.Close
myCn.Shutdown
Set rs = Nothing
Set myCn = Nothing
Columns.AutoFit
End Sub
Vuelva a colocar la [TABLE_NAME]
con un nombre de tabla real en y nuestra base de datos
Hit F5 o golpear el botón verde juego en la cinta.
Si todo ha ido bien, ahora debería ver la tabla devuelta a la hoja de cálculo.
mi muestra:
Como se puede ver. Agregar referencias a su propia biblioteca COM y almacenar las credenciales de inicio de sesión y otros datos confidenciales dentro del compilado .dll
protege sus datos (cadena de conexión). Es muy difícil descompilar el archivo *.dll
para obtener información sensible de él. Hay varias técnicas de codificación para proteger su *.dll
aún más, pero no voy a entrar en detalles ahora. Esto mismo logra lo que pediste.
myCn.GetConnection
devuelve el objeto ADODB.Connection
que se inicializó dentro de la biblioteca COM a la que se hace referencia. A ningún usuario de Excel se le presentará la cadena de conexión o los datos confidenciales (en realidad nadie más).
Puede modificar el código C# para aceptar parámetros de VBA, es decir, inicio de sesión, contraseña, catálogo inicial, consulta para ejecutar etc. ... si tiene usuarios con diferentes privilegios en la instancia de su SQL Server, no sería un mala idea para permitir que las personas inicien sesión.
Nota: no se ha generado ningún error al agregar el código C# y VBA.Recomiendo encarecidamente trabajar en ello si planea usar la técnica que he descrito anteriormente.
Véase mi respuesta para enhebrar http://stackoverflow.com/questions/1987333/excel-vba-secure-way-to-get-users-database-login-password-for-connection-string/2018970 # 2018970 – MikeD
@Remou. Gracias. @MikeD. Gracias, lo verifiqué. Está usando el registro, y estoy tratando de evitar eso. Debido a que la solución de problemas de un dispositivo se convertiría en una pesadilla al usar la configuración del registro (ya que será la configuración específica de la máquina del usuario) .... – Shiva
He encontrado que el registro es un lugar excelente, pero eso requiere configuración adicional para cada usuario. Puedo entender por qué querrías evitar eso. – RubberDuck