Conectar Linked Server SQL SERVER 2012 a base de datos de access remota con clave de acceso

Recientemente me ha tocado configurar un linked server desde SQL SERVER 2012 hacia un archivo de access — sí, todavía hay aplicaciones que utilizan ese tipo de archivo–. No debería ser una tarea muy compleja pero hay un detalle interesante que puede provocarle a más de alguno un dolor de cabeza temporal.

Recomiendo crear el linked server mediante código ya que por medio de la ventada podría ser algo confuso.

Crear el Linked Server

/* Crear el Linked Server*/

EXEC sp_addlinkedserver 
   @server = N'Test', 
   @provider = N'Microsoft.ACE.OLEDB.12.0', 
   @srvproduct = N'OLE DB Provider for ACE',
   @datasrc = N'\\ruta\del\archivo.mdb',
   @provstr= N';PWD=contraseña';

Detalle de parámetros

@server: Nombre del linked server

@provider: Proveedor que dará el acceso al archivo de access, en la versión de SQL SERVER 2012 ya viene incluido, en versiones anteriores habrá que descargarlo

@srvproduct: Nombre del producto, para fines prácticos dejarlo igual

@datasrc: Ruta donde se encuentra el archivo mdb

@provstr: Clave con la que está protegido el archivo mdb.

Crear el login del Linked Server

/* Aunque la BBDD tenga password, hay que añadir el usuario Admin sin password */

EXEC sp_addlinkedsrvlogin  
    @rmtsrvname = 'Test',
    @useself =  'FALSE' ,
    @rmtuser =  'Admin'  ,
    @rmtpassword =  NULL

El punto raro de esto es que en el parámetro @rmtpassword se debe enviar el valor NULL, de lo contrario no funcionará la conexión, la contraseña se envía en el parámetro @provstr de la creación del linked server.

Detalle de parámetros

@rmtsrvname: Nombre del linked server creado arriba

@useself: Determina si se quiere impersonar el usuario (hacerse pasar por), en este caso enviamos FALSO.

@rmtuser: nombre de usuario del archivo mdb.

@rmtpassword: clave del archivo, para este tipo de conexión en específico enviar NULL ya que la clave ha sido enviada en el parámetro @provstr de la creacion del linked server.

Observaciones adicionales

Asegurarse de que el usuario con el que se conecta SQL SERVER (en mi caso, con el usuario que corre el servicio de sqlserver), también tenga acceso a la carpeta donde se encuentra el archivo que se va a leer ya que es muy común que al no tener permiso el linked server devuelva error.



 

Ultimas entradas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *